给出这样的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
的参考,但仅限于属性,而不是节点名称。
答案 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']