【问题标题】:XPath for string contained in one XML element or another?包含在一个 XML 元素或另一个 XML 元素中的字符串的 XPath?
【发布时间】:2015-04-09 20:05:33
【问题描述】:

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

【问题讨论】:

    标签: html xpath tags web-scraping


    【解决方案1】:

    您确实应该发布您的输入 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 帖子]:

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

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

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

    将选择

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多