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。更大的灵活性。仍然很快,但是一旦掌握了它就更简单了。