包含在一个 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>
我需要一个可以找到 <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>