Xpath获取特定文本所呈现的值

时间:2013-09-09 10:38:02

标签: html dom xpath

使用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找到Categories并获取类别值 喜欢Cinema和HD。

目前,我正在使用:

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

它返回值,但也返回文本'categories:'。

我想做点什么:

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

但似乎没有用。

3 个答案:

答案 0 :(得分:1)

您的XPath表达式不起作用,因为内部<ul/>不是外部<ul/>的直接子项。使用子孙轴或//ul代替表达式末尾的子轴步/ul。如果您确定标记不会更改,最好只使用子轴步骤:/li/ul/li/a

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


无论如何,在搜索“标题”时我会尽可能具体,否则当任何“listVideoAttributes”-list的内容包含一个“Categories”或“Tags”时,你会发现误报:

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

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

答案 1 :(得分:0)

您可以尝试以下 Xpath

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

输出:

Cinema
HD

答案 2 :(得分:0)

有两个问题
//ul[@class="listVideoAttributes"][contains(., 'Categories:')]/ul

首先,外ul等于“listVideoAttributes”,只有包含作为子字符串,其次是内部{{1} }不是外在的孩子,而是孙子。 <怎么样

ul