2009-11-12 99 views

回答

7

按照XPath documentation at W3C

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

  • 节点-set(无节点的无节点集合)
  • 布尔值(true或false)
  • number(floating-poi NT数)
  • 串(的UCS字符的序列)

的节点是文档树中的元素,这样他们可以包括元素节点,属性节点和文本节点。并且请注意,XPath表达式可以选择多个节点 - 即多个元素 - 而不仅仅是一个节点。

一些例子:

  • //monkey - 将选择文档中的所有<monkey>元素,一个节点集
  • count(//monkey) - 将返回所有<monkey>元素的个数,一些
  • contains("mouse", "cat") - 会返回false,一个布尔
  • (//monkey)[0]/text() - 将从第一<monkey>元素返回文本,字符串
+0

我发布了一个更完整的答案。 – 2009-11-12 23:49:21

1

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

//x | //@x 

应该给你所有的X元素和所有的X属性的列表,如果我记得正确的语法。 (管是union运算符)

1

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

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

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

此外,它是很好的了解,根据给定的XPath引擎的主机上,选择的节点集可CONTA在来自多个文档的节点中。例如,如果宿主是XSLT,以下XPath表达式:

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

选择由$uri1标识的文档中的所有元素,并通过$uri2标识的文档中的所有元素的联合。

在所选择的节点组中的节点的顺序是“文档顺序”(如在深度优先),但是这仅适用于属于同一文档节点。如果选择属于多个文档的节点,则属于不同文档的节点之间的排序未定义(取决于实施)。最后,在XPath 2.0中,选择也可以是任意类型(可能是混合的),(并且具有预定义的顺序)的项目序列,并且可能有无限的项目类型集合(如果用户定义的类型是使用),包括所有内置的XML模式类型。

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