gpt4 book ai didi

html - 当它被埋在另一个标签中时,使用 XPath 获取 的文本,例如<强>

转载 作者:太空宇宙 更新时间:2023-11-04 16:10:48 25 4
gpt4 key购买 nike

下面的 XPath 通常足以匹配文本包含特定字符串的所有 anchor :

//a[contains(text(), 'SENIOR ASSOCIATES')]

尽管有这样的情况:

<a href="http://www.freshminds.net/job/senior-associate/"><strong>
SENIOR ASSOCIATES <br>
</strong></a>

文本包裹在 <strong> 中, 还有一个 <br>在 anchor 关闭之前,因此上面的 XPath 不返回任何内容。

如何调整 XPath 以允许 <a>包含附加标签,例如 <strong> , <i> , <b> , <br>等等,同时还在标准情况下工作?

最佳答案

不要使用 text() .

//a[contains(., 'SENIOR ASSOCIATES')]

与您的想法相反,text()不会为您提供元素的文本。

这是一个节点测试,即选择实际节点列表 (!) 的表达式,即元素的文本节点子节点

这里:

<a href="http://www.freshminds.net/job/senior-associate/"><strong>
SENIOR ASSOCIATES <br>
</strong></a>

a 没有文本节点子节点.所有文本节点都是 strong 的子节点.所以text()给你零个节点。

这里:

<a href="http://www.freshminds.net/job/senior-associate/"> <strong>
SENIOR ASSOCIATES <br>
</strong></a>

a 有一个文本节点子节点.它是空的(如“仅空白”)。


.另一方面只选择一个节点(上下文节点,<a> 本身)。

现在,contains()期望字符串作为它的参数。如果一个参数不是字符串,则首先转换为字符串。

将节点集(由一个或多个节点组成)转换为字符串是通过连接集合中第一个节点的所有文本节点后代完成的(*)。因此使用 . (或其更明确的等价物 string(.) )给你 SENIOR ASSOCIATES被一堆空格包围,因为你的 XML 中有一堆空格。

要去掉那个空格,使用 normalize-space()功能:

//a[contains(normalize-space(.), 'SENIOR ASSOCIATES')]

或者更短,因为“当前节点”是这个函数的默认值:

//a[contains(normalize-space(), 'SENIOR ASSOCIATES')]

(*) 这就是使用 //a[contains(.//text(), 'SENIOR ASSOCIATES')] 的原因可以在上面两个示例中的第一个中使用,但不能在第二个中使用。

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