如何简化这个Xpath表达式?
我有以下 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 中使用。
斯蒂芬
I have the following XML code :
<root>
<a><l_desc/></a>
<b><l_desc>foo</l_desc></b>
<c><l_desc>bar</l_desc></c>
</root>
I want to match the l_desc nodes with a or b nodes as parent.
For now, i use this xpath expression : //a/l_desc/.. | //b/l_desc/..
I would prefer writing something like this : //(a|b)/l_desc/..
Unfortunately, this expression is invalid.
Do you have any idea for reducing the first expression ?
The xpath is to be used in an XSLT stylesheet v1.0.
Stéphan
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更简单:
或者
使用起始
//
运算符(糟糕的设计,未知模式):或者
在 XPath 2.0 中,此有效
More simple:
Or
With starting
//
operator (bad design, unknown schema):Or
In XPath 2.0 this is valid
怎么样
?
How about
?
你可以在这里使用谓词
you can use a predicate here
用途:
这意味着:选择作为任何
a
或b
元素(本身是 a)的子元素的所有l_desc
元素XML 文档顶部元素的子元素。避免:
当您了解文档的结构时使用
//
缩写。//
的效率可能非常低。在不必要时使用反向轴(例如
parent::
)。包含反向轴的表达式比仅包含正向轴的表达式更难理解,而且效率可能较低。Use:
This means: Select all
l_desc
elements that are children of anya
orb
element that itself is a child of the top element of the XML document.Avoid:
Using the
//
abbreviation when you know the structure of the document.//
can be very inefficient.Using a reverse axis (such as
parent::
) when this is not necessary. Expressions containing reverse axes are more difficult to understand and may be less efficient than expressions containing only forward axes.