gpt4 book ai didi

html - 为什么 normalize-space(text()) 不适用于前面的子元素?

转载 作者:搜寻专家 更新时间:2023-10-31 23:16:03 25 4
gpt4 key购买 nike

毫无疑问,这是非常基本的,但它不会对我“点击”,尽管到目前为止我已经完成了研究。给定以下两个 HTML 示例:

示例 1

<div _ngcontent-c35="" class="row facet-container ng-star-inserted">
<div _ngcontent-c35="" class="searchresult-header">
Locatie
</div>
</div>

示例 2

<div _ngcontent-c42="" class="row facet-panel ng-star-inserted">
<div _ngcontent-c42="" class="facet-panel-header brand-pointer" data-target="#ft5" data-toggle="collapse">
<span _ngcontent-c42="" class="icon-plus ng-star-inserted" data-target="#ft5" data-toggle="collapse">
</span>
Locatie
</div>
<div _ngcontent-c42="" class="collapse" id="ft5">
</div>
</div>

现在我有了下面的 xpath:

//div[.//div[normalize-space(text())='Locatie']]

根据其他questions和有关 xpath 的网站,text() 选择直接从我们正在搜索的节点下降的文本节点。因此,在示例 #1 中,我希望检索第一个子“div”元素。这是正确发生的:那里没有问题。

我希望在示例 #2 中得到相同的结果。然而,事实并非如此:显然“span”元素破坏了这个特定的搜索。当我手动删除它时,我成功地检索到所需的“div”元素。为什么搜索中断?无论 span 元素是否存在,文本仍应是 div 元素的直接子元素。

TLDR:为什么“span”元素阻止我在示例 #2 中找到第二个“div”元素?

最佳答案

作为 Jason had answered 这是因为 normalize-space() 函数的签名,来自规范:

Function: string normalize-space(string?)

在 XPath 1.0 中,只要需要字符串参数,该语言就会通过 string() 函数应用类型转换。从规范:

A node-set is converted to a string by returning the string-value of the node in the node-set that is first in document order. If the node-set is empty, an empty string is returned.

因此,text() 节点测试生成的节点集被缩减为文档顺序中的第一个节点,然后该节点被转换为其 string-value

在这方面,当始终监督空白时,只有文本节点会引起注意:您的 div 元素有两个文本节点:

<div>
<div>
<!-- HERE ENDS THE FIRST --><span>
</span>
Locatie
<!-- HERE ENDS THE SECOND --></div>
<div>
</div>
</div>

当你有混合内容标记时,最好使用字符串值而不是文本节点。否则你应该使用这个表达式:

//div[.//div/text()[normalize-space()='Locatie']]

关于html - 为什么 normalize-space(text()) 不适用于前面的子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690788/

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