gpt4 book ai didi

xpath - 以 '.'为属性的xpath的理解

转载 作者:行者123 更新时间:2023-12-03 15:41:47 25 4
gpt4 key购买 nike

对于一些 Stackoverflow 问题/答案,我发现 xpath 像 //div[.='hello']有人可以解释一下.的确切作用吗?在表达式中以及何时使用它?

最佳答案

表达方式

//div[. = 'hello']

将查找字符串值为“hello”的所有 div 元素。元素的字符串值定义为该元素的所有后代文本节点的串联,因此以下所有元素都将匹配:
<div>hello</div>
<div>hel<i>lo</i></div>
<div>h<i>el</i>lo</div>
text()不同 - 它是一个位置路径步骤,用于提取当前上下文节点的所有文本节点子节点的集合。所以
//div[text() = 'hello']

查找至少具有一个值为“hello”的文本节点子节点的 div 元素(请记住节点集上的 = 具有隐式存在量词)-这将匹配上面的第一个示例,但不匹配第二个或第三个示例,并且也将匹配匹配诸如
<div>foo bar baz<br/>hello</div>

因为文本节点子节点之一是“你好”。

如果您想将函数应用于路径表达式返回的值,它会变得更加棘手,例如考虑
<div>
<!-- some comment -->
hello
</div>

表达式 //div[contains(., 'hello')]会找到这个元素,但是 //div[contains(text(), 'hello')]将不会!本例中的 div 有两个文本节点子节点(一个包含注释前的换行符和空格,另一个包含“hello”及其周围的空格),因此 XPath 2.0 将引发类型错误,因为您已经给了它一系列期望单个字符串的两个项目。但是 XPath 1.0 将接受该表达式,并通过静默忽略集合中除第一个节点之外的所有节点将两个节点集转换为字符串,从而无法匹配。

我很少需要使用 text()在样式表中,除非我正在编写一个关注一个接一个处理单个文本节点的模板 - 在谓词中几乎总是 .而不是 text()你的意思。

关于xpath - 以 '.'为属性的xpath的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237810/

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