XPath 表达式的上下文
XPath 表达式的计算取决于运算表达式所针对的上下文。 上下文包括计算表达式所针对的节点及其关联的环境,包括下列内容:
上下文节点相对于同辈节点的位置(按文档顺序)。
上下文的大小 — 即上下文节点的同辈节点数加 1。
可以解析变量引用的变量绑定。
函数库。
表达式范围中的命名空间声明。
为了更好地评价上下文的概念,请考虑包含节点的树。 向树根请求所有名为 X 的节点时,将返回一个结果集,而向树枝请求这些节点时,将返回不同的结果集。 因此,表达式的结果取决于执行表达式所针对的上下文。
XPath 表达式可以在一个特定的上下文匹配特定的模式,返回结果,然后相对于所返回节点的上下文执行其他运算。 这样,在整个文档树中进行搜索时,使用 XPath 表达式非常灵活。
基本 XPath 表达式
以下是基本的 XPath 表达式类型。 每一类型都在下面进行了描述。
当前上下文
文档根
根元素
递归下降
特定元素
示例
下面的示例显示一些基本的 XPath 表达式。 通过将这些简单的表达式组合在一起,并使用各种 XPath 运算符和特殊字符,可以生成更复杂的表达式。
当前上下文
以句点和正斜杠 (./) 作为前缀的表达式明确使用当前上下文作为上下文。 例如,下面的表达式引用当前上下文内的所有<author>
元素:./author
注意,此表达式等效于以下表达式:
author
文档根
以正斜杠 (/) 为前缀的表达式使用文档树的根作为上下文。 例如,下面的表达式引用此文档根处的<bookstore>
元素:/bookstore
根元素
使用正斜杠后接星号 (/*) 的表达式将使用根元素作为上下文。 例如,以下表达式查找文档的根元素:/*
递归下降
使用双正斜杠 (//) 的表达式指示可以包括零个或多个层次结构级别的搜索。 如果此运算符出现在模式的开头,上下文相对于文档的根。 例如,下面的表达式引用当前文档内任何位置的所有<author>
元素://author
.// 前缀指示上下文从层次结构中当前上下文所指示的级别开始。
特定元素
以元素名开头的表达式引用特定元素的查询,从当前上下文节点开始。 例如,下面的表达式引用当前上下文节点中<images>
元素内的<background.jpg>
元素:images/background.jpg
下面的表达式引用当前上下文节点中
<bookstore>
元素内<book>
元素的集合。bookstore/book
下面的表达式引用当前上下文节点中所有的
<first.name>
元素:first.name
提示
元素名可以包括句点字符 (.)。 这些名称的用法与任何其他名称一样。
DOM 中的上下文
在 Microsoft XML DOM 中使用 XPath 表达式时,上下文是调用其 selectNodes 方法或 selectSingleNode 方法的 Node 对象。
如果直接从 DOM 使用 XPath,应从特定节点定义上下文。
XSLT 中的上下文
如果直接从 XSLT 使用 XPath,应通过当前节点定义上下文。
其他资源
有关更多信息,请参见 www.w3.org/TR/xpath 上的 XML Path Language (XPath) Version 1.0 (W3C Recommendation 16 November 1999)(英文)。