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 中使用。

斯蒂芬

4

4 回答 4

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
于 2011-01-14T12:50:07.727 回答
1

你可以在这里使用谓词

l_desc[../a|../b]
于 2011-01-14T12:49:19.053 回答
1

怎么样

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

?

于 2011-01-14T12:52:02.000 回答
1

采用:

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

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

避免

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

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

于 2011-01-14T15:36:54.553 回答