【问题标题】:XML SelectSingleNode Is case sensitiveXML SelectSingleNode 区分大小写
【发布时间】:2016-08-24 04:11:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml powershell xpath case-sensitive


    【解决方案1】:

    如果 XML 文件有问题(ToLower() 不够用),您可以像这样使用translate() 将 XML 值中的大写替换为小写。

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

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

    【讨论】:

    • 如果他们的 ID 使用扩展拉丁字符或其他 unicode 怎么办?
    • 没有线索,从来不需要找出:)
    • 嗯,这是一个反问,这意味着这个技巧在这些情况下不起作用。
    • @wOxxOm 如果您在翻译列表中包含额外的大写和小写字符,它会起作用。
    • 好吧,当然,如果不是带有至少重音字符的实际字符串,包含此信息也会使问题受益。
    【解决方案2】:

    除了 XPATH,您还可以选择属性等节点:

    $config = "xmlfile"
    [xml]$configxml = Get-Content $config
    $siteId = "Test"
    
    $siteInfo = $configxml.configuration.environment | Where id -eq $siteId
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢您的回复。除了$siteId,我们还要转换xml id。你能告诉我我们该怎么做吗?
      • 贴出的代码中已经有$Siteid = $Siteid.ToLower()这个问题,所以这个答案是多余的,并没有提供真正的解决方案。
      • @wOxxOm:哎呀。你说的对。我在查看代码时错过了这一点。
      • @mahesh:看看这里:stackoverflow.com/a/18818734/3490275 我认为在该链接上找到的答案提供了您正在寻找的内容。
      猜你喜欢
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2013-03-06
      • 2020-02-18
      • 2023-03-15
      相关资源
      最近更新 更多