使用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
但似乎没有用。
答案 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