包含在一个 XML 元素或另一个元素中的字符串的 XPath?

XPath for string contained in one XML element or another?

我需要一个可以找到 <a> 标签或 <option> 标签的 XPath,每个标签都包含 "something"。

所以 XPath 可以匹配任何一个

<a attributes='value'>something</a>

<option attributes="value">something</option>

我试过这个:

$x("//*[local-name()='a' contains(.,'something') or local-name()='option' contains(.,'something')]")

我也试过这个:

$x("//*[local-name(contains(.,'something'))='a' or local-name(contains(.,'something'))='option']")

但是它们都不起作用。在第一个中,我可以排除 contains() 并找到标签,但我需要能够搜索那些只包含指定 "something" 文本的标签。

你真的应该 post 你的输入 XML。

假设是这样的:

<r>
  <a>xxx something</a>
  <a>yyy nothing</a>
  <option>something xxx</option>
  <option>nothing xxx</option>
</r>

(1) 然后(如果您试图忽略名称空间):

//*[(local-name() = 'a' or local-name() = 'option')][contains(., 'something')]

(2) 或(如果没有命名空间)[credit: 较早的@alecxe post]:

//*[self::option or self::a][contains(., "something")]

(3) 或(如果使用 XPath 2.0,同样没有命名空间):

//(a|option)[contains(., 'something')]

将select

<a>xxx something</a>
<option>something xxx</option>