2

我认为 XPath 表达式只能指向/选择元素或元素属性是否正确?

4

3 回答 3

7

根据W3C 的 XPath 文档

对表达式求值以产生一个对象,该对象具有以下四种基本类型之一:

  • 节点集(无重复节点的无序集合)
  • 布尔值(真或假)
  • 数字(浮点数)
  • 字符串(一系列 UCS 字符)

节点是文档树的元素,因此它们可以包括元素节点、属性节点和文本节点。请注意,XPath 表达式可以选择多个节点——即多个元素——而不仅仅是单个节点。

一些例子:

  • //monkey- 将选择<monkey>文档中的所有元素,一个节点集
  • count(//monkey)- 将返回所有<monkey>元素的计数,一个数字
  • contains("mouse", "cat")- 将返回 false,一个布尔值
  • (//monkey)[0]/text()- 将返回第一个<monkey>元素的文本,一个字符串
于 2009-11-12T17:10:51.113 回答
1

由于您可以自由使用集合运算符,因此您几乎可以选择任何东西。

//x | //@x

如果我没记错语法,应该给你一个所有 x 元素和所有 x 属性的列表。(管道是联合运算符)

于 2009-11-12T17:10:38.310 回答
1

Dave Webb 目前接受的答案只是部分正确

可以选择所有七种类型的节点

  • (文档节点),如"/"
  • 元素,例如:"/*"
  • 属性,例如:"//@*"
  • 文本节点,如:"//text()"
  • 评论节点,如:"//comment()"
  • 处理指令节点,如:"//processing-instruction()"
  • 命名空间节点,如:"//namespace::*"

此外,很高兴知道根据给定 XPath 引擎的主机,所选节点集可能包含来自多个文档的节点。例如,如果主机是 XSLT,则以下 XPath 表达式:

"document($uri1)//* | document($uri2)//*"

选择由 标识的文档中的$uri1所有元素和由 标识的文档中的所有元素的并集$uri2

所选节点集中的节点顺序是“文档顺序”(如深度优先),但这仅适用于属于同一文档的节点。如果选择了属于多个文档的节点,则不定义属于不同文档的节点之间的顺序(取决于实现)。

最后,在 XPath 2.0 中,选择还可以是任何类型的项目序列(可能是混合的),(并且具有预定义的顺序)并且可能存在无限的项目类型集(如果使用用户定义的类型),包括所有内置的 XML 模式类型。

在 XPath 2.1(预计将在我们发言时发布的 W3C 工作草案)中,还将有一个“function-item”类型,因为函数将成为该语言的第一类类型,并且可以作为参数传递,由 a 返回函数,按顺序存储或动态创建。

于 2009-11-12T23:47:56.247 回答