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

And*_*rio 3 html tags xpath web-scraping

我需要一个XPath,它可以找到一个<a>标签或一个<option>标签,每个标签都包含“某物”。

因此,XPath可以匹配

<a attributes='value'>something</a>
Run Code Online (Sandbox Code Playgroud)

要么

<option attributes="value">something</option>
Run Code Online (Sandbox Code Playgroud)

我尝试了这个:

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

我也试过这个:

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

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

kjh*_*hes 5

您确实应该发布您的输入XML。

可以说是这样的:

<r>
  <a>xxx something</a>
  <a>yyy nothing</a>
  <option>something xxx</option>
  <option>nothing xxx</option>
</r>
Run Code Online (Sandbox Code Playgroud)

(1)然后(如果要忽略名称空间):

//*[(local-name() = 'a' or local-name() = 'option')][contains(., 'something')]
Run Code Online (Sandbox Code Playgroud)

(2)或(如果没有名称空间)[ 信誉:早期的@alecxe帖子]:

//*[self::option or self::a][contains(., "something")]
Run Code Online (Sandbox Code Playgroud)

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

//(a|option)[contains(., 'something')]
Run Code Online (Sandbox Code Playgroud)

将选择

<a>xxx something</a>
<option>something xxx</option>
Run Code Online (Sandbox Code Playgroud)