1

使用 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 来定位类别并获取类别值,例如 Cinema 和 HD。

目前,我正在使用:

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

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

我想做类似的事情:

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

但这似乎不起作用。

4

3 回答 3

1

您的 XPath 表达式不起作用,因为 inner<ul/>不是 external 的直接子级<ul/>。在表达式末尾使用 descendant-or-self 轴步骤//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()如果您无法从所使用的编程语言中读取字符串值,您可能需要添加 a ,这通常是首选(例如,当链接包含像<a href="..."><strong>foo</strong><a>;text()这样的粗体文本时,在这种情况下不会返回字符串值。

于 2013-09-09T11:13:50.687 回答
0

你可以试试下面的Xpath

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

输出:

Cinema
HD
于 2013-09-09T10:46:10.763 回答
0

有两个问题

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

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

//ul[contains(@class, 'listVideoAttributes')][contains(., 'Categories')]/li/ul/li/a
于 2013-09-09T11:11:39.420 回答