首页 > 解决方案 > 或在 XPath 表达式中从多个节点名称中进行选择

问题描述

给定这样的XML...

<Rule scope="node">
    <Property>regKeyExists</Property>
    <Path>HKLM\SOFTWARE\MozillaPlugins\ K:@microsoft.com/GENUINE</Path>                             
    <Operator>-eq</Operator>
    <Value>true</Value>
</Rule>
<Or scope="node">
    <Rule>
        <Property>regKeyExists</Property>
        <Path>HKLM\SOFTWARE\MozillaPlugins\ K:@microsoft.com/GENUINE</Path>                             
        <Operator>-eq</Operator>
        <Value>true</Value>
    </Rule>
</Or>

...但是它可能具有 and 以外的节点<Rule><Or>并且可能具有Scope“节点”以外的值,我试图仅选择范围 = node 的 Rule 和 Or 节点。目前我正在使用$nodes = $xml.SelectNodes("./*[@scope='node']")then 循环foreach ($node in $nodes)和检查$node.name,所以我可以只使用 Rule 和 Or 节点。但我更喜欢使用 XPath。我找到了or在谓词表达式中使用的参考,但仅限于属性,而不是节点名称。

标签: xmlpowershellxpath

解决方案


这个 XPath,

//*[self::Rule or self::Or][@scope='node']

将选择所有Rule或属性值为 的Or元素。@scope'node'


推荐阅读