gpt4 book ai didi

html - 为什么 normalize-space(text()) 在按文本选择时会忽略内部节点?

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

为什么在下面的示例中我可以使用 //label[text()[normalize-space() = 'some label']]//label[normalize-space(text ()) = 'some label'] 按文本选择标签并忽略 span 的内容?为什么?我真的很想了解这个问题。在 http://www.w3.org/TR/xpath/#function-normalize-space没有关于此功能的信息。这正是我想要的,但我也非常想知道为什么这个解决方案有效:)

顺便说一句,哪种语法更好://label[text()[normalize-space() = 'some label']] vs //label[normalize-space(text ()) = 'some label'] 为什么?

<label>
<span>some span</span>
some label
</label>

<label>
other label
<span>other span</span>
</label>

我正在寻找您的有用答案:)

最佳答案

这与 normalize-space() 无关,而与 text() 有关。

text()child::text() 的缩写,选择标签元素的直接子节点的文本节点。除非您要剥离空白文本节点,否则示例中的标签元素有两个子文本节点,其中一个全是空白,另一个包含被空白包围的“某些标签”。

BTW, which syntax is better: //label[text()[normalize-space() = 'some label']] vs //label[normalize-space(text()) = 'some label'] and why?

他们做不同的事情;更好的是实现您想要实现的目标。

在 XPath 1.0 中,第一个表达式选择具有子文本节点的标签元素,其值在空白标准化后等于“some label”。第二个选择标签元素,其第一个子文本节点在空白标准化后等于“some label”。那是因为 normalize-space() (就像所有需要字符串的函数),如果你给它一个节点集,它会采用节点集中第一个节点的字符串值。

在 XPath 2.0 中,第一个表达式选择具有子文本节点的标签元素,其值在空白规范化后等于“some label”。如果标签元素有一个子文本节点,第二个选择标签元素,在空白规范化之后,等于“some label”,但如果标签元素有多个子文本节点,则会引发错误。这是因为 normalize-space()(与所有需要字符串的函数一样)原子化了它的参数,如果原子化序列的长度大于一,则报告类型错误。

关于html - 为什么 normalize-space(text()) 在按文本选择时会忽略内部节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819575/

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