【问题标题】:Xpath get values where a specific text presentsXpath 获取特定文本出现的值
【发布时间】:2013-09-09 19:13:50
【问题描述】:

使用 xPath,我试图获得以下值:

html:

<ul class="listVideoAttributes alpha only">
    <li class="alpha only">
        <span>Categories:</span>
        <ul>
            <li class="psi alpha">
                <a href="#">Cinema</a>
            </li>
            <li class="omega">
                <a href="#">HD</a>
            </li>
        </ul>
    </li>
</ul>

类别并不总是被命名为类别,有时他们称之为Tags

我希望使用以下 xPath 来定位类别并获取类别值 比如电影和高清。

目前,我正在使用:

//ul[@class="listVideoAttributes"][contains(., 'Categories:')]

它返回值,还返回文本“类别:”。

我想做这样的事情:

//ul[@class="listVideoAttributes"][contains(., 'Categories:')]/ul

但它似乎不起作用。

【问题讨论】:

  • 你的意思是什么类别并不总是被命名为类别,有时他们称之为标签。

标签: html dom xpath


【解决方案1】:

您的 XPath 表达式不起作用,因为内部 &lt;ul/&gt; 不是外部 &lt;ul/&gt; 的直接子级。在表达式末尾使用后代或自身轴步骤 //ul 而不是子轴步骤 /ul。如果您确定标记不会改变,最好只使用子轴步骤:/li/ul/li/a

另一个问题是@class属性不等于listVideoAttributes,而只是包含它。您永远不应该将 HTML-class-attributes 与 equals 进行比较,始终使用 contains。


无论如何,我在搜索“标题”时会尽可能具体,否则当任何“listVideoAttributes”列表的内容包含一个“类别”或“标签”时,您可能会发现误报:

//ul[contains(@class, 'listVideoAttributes')]/li[contains(span, 'Categories') or contains(span, 'Tags')]//a

如果您无法从所使用的编程语言中读取字符串值,您可能需要添加 /text(),这通常是首选(例如,当链接包含像 &lt;a href="..."&gt;&lt;strong&gt;foo&lt;/strong&gt;&lt;a&gt; 这样的粗体文本时;text()在这种情况下不会返回字符串值。

【讨论】:

    【解决方案2】:

    你可以试试下面的Xpath

    //ul[contains(@class,'listVideoAttributes') and contains(.//span,'Categories')]//a/text()
    

    输出:

    Cinema
    HD
    

    【讨论】:

      【解决方案3】:

      有两个问题

      //ul[@class="listVideoAttributes"][contains(., 'Categories:')]/ul
      

      首先外部ul 类不等于“listVideoAttributes”,它仅包含作为子字符串,其次内部ul 不是外层的直子,是孙子。怎么样

      //ul[contains(@class, 'listVideoAttributes')][contains(., 'Categories')]/li/ul/li/a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 1970-01-01
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        相关资源
        最近更新 更多