gpt4 book ai didi

html - Xpath 选择除最后一项之外的项目包含语法

转载 作者:太空狗 更新时间:2023-10-29 13:40:19 24 4
gpt4 key购买 nike

我想选择以下 html 项目( Action 、喜剧),但最后一个项目(标签)除外。

要选择我的所有后续代码都有效:

//*[@id="video-tags"]//a[contains(@href,'tags')]

但是要选择除最后一个(标签)之外的内容,它不适用于我的以下代码:

//*[@id="video-tags"]//a[contains(@href,'tags') not(position() > last() -1)]

html

<ul id="video-tags">
<li>Uploader: </li>
<li class="profile_name"><a href="/profiles/wilco">wilco</a></li>
<li><em>Tagged: </em></li>
<li><a href="/tags/action">action</a>, </li>
<li><a href="/tags/comedy">comedy</a>, </li>
<li>more <a href="/tags/"><strong>tags</strong></a></li>
</ul>

提前致谢

尼克

最佳答案

除了语法错误 - 你需要一个 and ,即 contains(@href,'tags') and not(position()...) - 你被一个微妙的问题绊倒了 //已定义。

XPath //a[position() < last()] 不会给你每一个 a除了最后一个,它会给你每一个 a那不是最后一个a在其各自的父元素内。由于每个 li最多包含一个 a , 每个 a是最后a在其各自的父级中,因此该测试将完全不匹配。

您可以通过将大部分表达式括在括号中并将 position 放在一起来实现您想要的效果 checkin 一个单独的谓词

(//*[@id="video-tags"]//a[contains(@href,'tags')])[position() < last()]

圆括号导致最终谓词应用于整个表达式选择的节点集,而不仅仅是应用于 a。定位步骤,即它会首先找到所有 a href 的元素包含“标签”,然后按文档顺序返回这些选定元素中除最后一个之外的所有元素。


技术解释-//的定义|在 XPath 中,它是 /descendant-or-self::node()/ 的简写(包括斜杠),这是一个定位步骤,为您提供此节点及其所有后代节点。所以//a表示 /descendant-or-self::node()/child::a , 和 //a[something]表示 /descendant-or-self::node()/child::a[something] - 谓词适用于 child::步骤,而不是 descendant-or-self::一。如果您想将谓词应用于后代搜索,那么您应该使用 descendant::明确轴 - /descendant::a[something] .

关于html - Xpath 选择除最后一项之外的项目包含语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com