XML SelectSingleNode 区分大小写
XML SelectSingleNode Is case sensitive
在验证 XML 文件中的 ID 时,它区分大小写。我添加了 "translate" 以使其不区分大小写。以下是我的代码:
$Config = "xmlfile"
[xml]$configxml = Get-Content $config
$siteId = "Test"
$Siteid = $Siteid.ToLower()
$siteinfo = $configxml.SelectSingleNode("/configuration/environment[translate(@id='$($siteId)'])");
if(!$siteinfo)
{
Write-Host "id specified '$siteId' not found in '$config' Aborting..."
exit -1
}
else
{
Write-Host "site id is present"
}
我收到以下错误:
id specified 'Test' not found in 'xmlfile' Aborting...
这是我的 xml 文件:
<configuration>
<!-- TEST -->
<environment id="TEST">
<client>ABC</client>
<type>Test</type>
<filetype>ALL</filetype>
<enable>yes</enable>
</environment>
</configuration>
有人可以建议我如何使其不区分大小写以及如何使用 "translate" 的可能解决方案吗?
我只想在您的 $siteId 变量上使用 ToLower() 。这就是我通常处理使文本不区分大小写的方式——只要确保所有文本都采用一种一致的格式即可。您也可以使用 ToUpper() 来实现此目的。
除了 XPATH,您还可以 select 像属性这样的节点:
$config = "xmlfile"
[xml]$configxml = Get-Content $config
$siteId = "Test"
$siteInfo = $configxml.configuration.environment | Where id -eq $siteId
这也会不区分大小写地匹配您的 ID...
如果 XML 文件有问题(ToLower()
不够),您可以像这样使用 translate()
将 XML 值中的大写字母换成小写字母.
translate(Value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
就我个人而言,我开始将 XML 处理移交给 System.Xml.Linq
。更大的灵活性。仍然很快,但是一旦掌握了它就更简单了。
在验证 XML 文件中的 ID 时,它区分大小写。我添加了 "translate" 以使其不区分大小写。以下是我的代码:
$Config = "xmlfile"
[xml]$configxml = Get-Content $config
$siteId = "Test"
$Siteid = $Siteid.ToLower()
$siteinfo = $configxml.SelectSingleNode("/configuration/environment[translate(@id='$($siteId)'])");
if(!$siteinfo)
{
Write-Host "id specified '$siteId' not found in '$config' Aborting..."
exit -1
}
else
{
Write-Host "site id is present"
}
我收到以下错误:
id specified 'Test' not found in 'xmlfile' Aborting...
这是我的 xml 文件:
<configuration>
<!-- TEST -->
<environment id="TEST">
<client>ABC</client>
<type>Test</type>
<filetype>ALL</filetype>
<enable>yes</enable>
</environment>
</configuration>
有人可以建议我如何使其不区分大小写以及如何使用 "translate" 的可能解决方案吗?
我只想在您的 $siteId 变量上使用 ToLower() 。这就是我通常处理使文本不区分大小写的方式——只要确保所有文本都采用一种一致的格式即可。您也可以使用 ToUpper() 来实现此目的。
除了 XPATH,您还可以 select 像属性这样的节点:
$config = "xmlfile"
[xml]$configxml = Get-Content $config
$siteId = "Test"
$siteInfo = $configxml.configuration.environment | Where id -eq $siteId
这也会不区分大小写地匹配您的 ID...
如果 XML 文件有问题(ToLower()
不够),您可以像这样使用 translate()
将 XML 值中的大写字母换成小写字母.
translate(Value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
就我个人而言,我开始将 XML 处理移交给 System.Xml.Linq
。更大的灵活性。仍然很快,但是一旦掌握了它就更简单了。