或者在XPath表达式中从多个节点名称中进行选择

时间:2018-06-15 15:03:22

标签: xml powershell 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>

...但可能包含<Rule><Or>以外的节点,除了&#34; node&#34;之外可能有Scope的值,我正在尝试只选择其中scope = node的Rule和Or节点。 目前我正在使用$nodes = $xml.SelectNodes("./*[@scope='node']")然后使用foreach ($node in $nodes)循环并检查$node.name,这样我就可以使用Rule和Or节点。但我的偏好是使用XPath。我在谓词表达式中找到了使用or的参考,但仅限于属性,而不是节点名称。

2 个答案:

答案 0 :(得分:2)

这个XPath,

TextView achillea = (TextView) findViewById(R.id.Achillea);
    achillea.setMovementMethod(LinkMovementMethod.getInstance());
    Spannable spans1 = (Spannable) achillea.getText();
    ClickableSpan clickSpan1 = new ClickableSpan() {

        @Override
        public void onClick(View widget)
        {

            Intent achillea_flow = new  Intent(A_flowers.this,achillea.class);
            startActivity(achillea_flow);

        }
    };
    spans1.setSpan(clickSpan1, 0, spans1.length(),  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

将选择//*[self::Rule or self::Or][@scope='node'] 属性值为Rule的所有Or@scope元素。

答案 1 :(得分:0)

XPath 2.0允许

//(Rule|Or)[@scope='node']

和XPath 1.0接近

(//Rule|//Or)[@scope='node']