XML SelectSingleNode区分大小写

时间:2016-08-23 18:41:51

标签: xml powershell xpath case-sensitive

在验证XML文件中的id时,它会区分大小写。我添加了“translate”以使其不区分大小写。以下是我的代码:

$scope.model = {
  activePage: 0
}

我收到了以下错误:

$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"
}

这是我的xml文件:

id specified 'Test' not found in 'xmlfile' Aborting...

有人可以建议我可能的解决方案如何使其不区分大小写以及如何使用“翻译”?

3 个答案:

答案 0 :(得分:2)

如果XML文件存在问题(ToLower()不够用),您可以使用translate()这样在XML值中将大写换成小写。

translate(Value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')

我个人开始将XML处理移到System.Xml.Linq。更灵活。一旦掌握了它,它仍然很快,但更简单。

答案 1 :(得分:1)

您也可以选择类似属性的节点而不是XPATH:

$config = "xmlfile"
[xml]$configxml = Get-Content $config
$siteId = "Test"

$siteInfo = $configxml.configuration.environment | Where id -eq $siteId

这也将不区分大小写匹配您的ID ...

答案 2 :(得分:0)

我只会在$ siteId变量上使用ToLower()。这就是我通常处理文本不区分大小写的方法 - 只需确保所有文本都采用一致的格式。您也可以使用ToUpper()来实现此目的。