包含特定单词的两个不同标签(任一个)的XPath?

时间:2015-04-09 20:05:33

标签: html xpath tags web-scraping

我需要一个可以找到<a>标记或<option>标记的XPath,每个标记都包含“内容”。

因此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()并找到标签,但我需要能够搜索那些仅包含指定“某事”文本的标签。

1 个答案:

答案 0 :(得分:4)

你真的应该发布你的输入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)或(如果没有名称空间)[信用:早期@alecxe帖子]:

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

(3)或(如果使用XPath 2.0,再次没有名称空间):

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

将选择

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