我认为XPath表达式只能指向/选择元素或元素属性吗?
答案 0 :(得分:7)
评估表达式以产生一个 对象,具有以下之一 四种基本类型:
- node-set(没有重复的无序节点集合)
- 布尔值(true或false)
- 数字(浮点数)
- string(一系列UCS字符)
节点是文档树的元素,因此它们可以包括元素节点,属性节点和文本节点。请注意,XPath表达式可以选择多个节点 - 即多个元素 - 而不仅仅是一个节点。
一些例子:
//monkey
- 将选择文档中的所有<monkey>
元素,即节点集count(//monkey)
- 将返回所有<monkey>
元素的计数,数字contains("mouse", "cat")
- 将返回false,布尔值(//monkey)[0]/text()
- 将返回第一个<monkey>
元素中的文本,即字符串答案 1 :(得分:1)
由于你可以自由使用集合运算符,你几乎可以选择任何东西。
//x | //@x
如果我正确地回忆起语法,应该给你一个所有x元素和所有x属性的列表。 (管道是工会运营商)
答案 2 :(得分:1)
Dave Webb目前接受的答案只是部分正确。
可以选择所有七种类型的节点:
"/"
"/*"
"//@*"
"//text()"
"//comment()"
"//processing-instruction()"
"//namespace::*"
此外,最好知道根据给定XPath引擎的主机,所选节点集可能包含来自多个文档的节点。例如,如果主机是XSLT,则使用以下XPath表达式:
"document($uri1)//* | document($uri2)//*"
选择$uri1
标识的文档中所有元素的联合以及$uri2
标识的文档中的所有元素。
所选节点集中节点的顺序是“文档顺序”(如深度优先),但这仅适用于属于同一文档的节点。如果选择了属于多个文档的节点,则不会定义属于不同文档的节点之间的顺序(取决于实现)。
最后,在XPath 2.0中,选择也可以是任何类型的项目序列(可能是混合的)(并且具有预定义的顺序),并且可能存在无限的项目类型集合(如果使用用户定义的类型) ),包括所有内置的XML Schema类型。
在XPath 2.1(W3C工作草案预计将在我们发言时发布)中,还会有一个“函数项”类型,因为函数将成为该语言的一流类型,并可作为参数传递,由函数返回,存储在序列中或动态创建。