我有以下XML代码:
<root>
<a><l_desc/></a>
<b><l_desc>foo</l_desc></b>
<c><l_desc>bar</l_desc></c>
</root>
我想将 l_desc 节点与 a 或 b 节点作为父节点进行匹配。
现在,我使用这个xpath表达式://a/l_desc/.. | //b/l_desc/..
我更喜欢这样写://(a|b)/l_desc/..
不幸的是,这个表达式无效。
你有没有想过减少第一个表达式? xpath将用于XSLT样式表v1.0。
斯蒂芬
答案 0 :(得分:3)
我希望将
l_desc
个节点与之匹配 a或b节点作为父
更简单:
/root/a/l_desc | /root/b/l_desc
或
/root/*[self::a | self::b]/l_desc
启动//
运算符(设计错误,未知架构):
//a/l_desc | //b/l_desc
或者
//*[self::a | self::b]/l_desc
在XPath 2.0中,有效
/root/(a|b)/l_desc
答案 1 :(得分:1)
你可以在这里使用谓词
l_desc[../a|../b]
答案 2 :(得分:1)
怎么样
//l_desc[parent::a or parent::b]
答案 3 :(得分:1)
使用:
/*/*[self::a or self::b]/l_desc
这意味着:选择所有l_desc
个元素,这些元素是任何a
或b
元素的子元素,它们本身就是XML的顶级元素的子元素文档。
<强>避免强>:
在您了解文档结构时使用//
缩写。 //
可能效率很低。
在不需要时使用反向轴(例如parent::
)。包含反向轴的表达式更难以理解,并且可能比仅包含正向轴的表达式效率低。