如何简化这个Xpath表达式?

发布于 2024-10-11 21:22:30 字数 517 浏览 10 评论 0原文

我有以下 XML 代码:

<root>
   <a><l_desc/></a>
   <b><l_desc>foo</l_desc></b>
   <c><l_desc>bar</l_desc></c>
</root>

我想要将 l_desc 节点与 ab 节点作为父节点进行匹配。
现在,我使用这个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

青瓷清茶倾城歌 2024-10-18 21:22:30

我想将 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

I want to match the l_desc nodes with
a or b nodes as parent

More simple:

/root/a/l_desc | /root/b/l_desc

Or

/root/*[self::a | self::b]/l_desc

With starting // operator (bad design, unknown schema):

//a/l_desc | //b/l_desc

Or

//*[self::a | self::b]/l_desc

In XPath 2.0 this is valid

/root/(a|b)/l_desc
极度宠爱 2024-10-18 21:22:30

怎么样

//l_desc[parent::a or parent::b]

How about

//l_desc[parent::a or parent::b]

?

网名女生简单气质 2024-10-18 21:22:30

你可以在这里使用谓词

l_desc[../a|../b]

you can use a predicate here

l_desc[../a|../b]
音栖息无 2024-10-18 21:22:30

用途:

/*/*[self::a or self::b]/l_desc

这意味着:选择作为任何 ab 元素(本身是 a)的子元素的所有 l_desc 元素XML 文档顶部元素的子元素。

避免

  1. 当您了解文档的结构时使用//缩写// 的效率可能非常低。

  2. 在不必要时使用反向轴(例如 parent::)。包含反向轴的表达式比仅包含正向轴的表达式更难理解,而且效率可能较低。

Use:

/*/*[self::a or self::b]/l_desc

This means: Select all l_desc elements that are children of any a or b element that itself is a child of the top element of the XML document.

Avoid:

  1. Using the // abbreviation when you know the structure of the document. // can be very inefficient.

  2. 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文