JavaTM Platform
Standard Ed. 6

软件包 javax.xml.xpath

此包提供了用于 XPath 表达式的计算和访问计算环境的 object-model neutral API。

请参见:
          描述

接口摘要
XPath XPath 提供了对 XPath 计算环境和表达式的访问。
XPathExpression XPathExpression 提供了对编译后的 XPath 表达式的访问。
XPathFunction XPathFunction 提供了对 XPath 函数的访问。
XPathFunctionResolver XPathFunctionResolver 提供了对用户定义的 XPathFunction 集的访问。
XPathVariableResolver XPathVariableResolver 提供了对用户定义的 XPath 变量集的访问。
 

类摘要
XPathConstants XPath 常量。
XPathFactory XPathFactory 实例可用于创建 XPath 对象。
 

异常摘要
XPathException XPathException 表示通用 XPath 异常。
XPathExpressionException XPathExpressionException 表示 XPath 表达式中的错误。
XPathFactoryConfigurationException XPathFactoryConfigurationException 表示 XPathFactory 环境中的配置错误。
XPathFunctionException XPathFunctionException 表示 XPath 函数的错误。
 

软件包 javax.xml.xpath 的描述

此包提供了用于 XPath 表达式的计算和访问计算环境的 object-model neutral API。

应用以下 XML 标准:


XPath 概述

XPath 语言提供了用于从 XML 文档选择节点的简单、简洁的语法。XPath 还提供了将 XML 文档对象模型(DOM)树中的节点转换为布尔值、double 值或字符串值的规则。XPath 是 W3C 定义的语言和正式的 W3C 推荐,W3C 拥有 XML Path Language (XPath) Version 1.0 规范。

XPath 诞生于 1999 年,作为对 XSLT 和 XPointer 语言的补充,但近来已成为流行的独立语言,因为单个 XPath 表达式可用于替代多行 DOM API 代码。

XPath 表达式

XPath 表达式 由一个位置路径 和一个或多个可选的谓词 组成。表达式还可以包含 XPath 变量。

以下是一个简单的 XPath 表达式的示例:

/foo/bar

此示例将选择如下所示的 XML 文档中的 <bar> 元素:

<foo>
<bar/>
</foo>

表达式 /foo/bar 是位置路径的一个示例。虽然 XPath 位置路径类似于 Unix-style 文件系统路径,但它们存在重要的区别,即 XPath 表达式返回与表达式匹配的所有 节点。因此,/foo/bar 表达式将选中以下文档中的所有三种 <bar> 元素:

<foo>
<bar/>
<bar/>
<bar/>
</foo>

特殊位置路径操作符 // 选择位于 XML 文档中任何深度的节点。以下示例选择所有 <bar> 元素,不管它们在文档中处于什么位置:

//bar

通配符 * 用于选择所有元素节点。以下示例选择 <foo> 元素的所有子元素:

/foo/*

除元素节点外,XPath 位置路径还可用于寻找属性节点、文本节点、注释节点和指令处理节点。下表给出了每种节点类型的位置路径的示例:

位置路径 描述
/foo/bar/@id 选择 <bar> 元素的属性 id
/foo/bar/text() 选择 <bar> 元素的文本节点。转义和非转义字符数据之间没有区别。
/foo/bar/comment() 选择 <bar> 元素中包含的所有注释节点。
/foo/bar/processing-instruction() 选择 <bar> 元素中包含的所有指令处理节点。

谓词允许修改 XPath 位置路径所选中的节点。谓词的形式为 [expression]。以下示例选择包含值为 trueinclude 属性的所有 <foo> 元素:

//foo[@include='true']

谓词可互相追加以进一步修改表达式,例如:

//foo[@include='true'][@mode='bar']

使用 XPath API

以下示例演示了使用 XPath API 来选择一个或多个来自 XML 文档的节点:

XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget";
InputSource inputSource = new InputSource("widgets.xml");
NodeList nodes = (NodeList) xpath.evaluate(expression, inputSource, XPathConstants.NODESET);

XPath 表达式和类型

虽然 XPath 表达式选择的是 XML 文档的节点,但 XPath API 允许将选中的节点组合到以下其他数据类型中:

用于计算表示式的方法调用中的 QName 参数指定了所需的返回类型,其中方法调用要么是调用 XPathExpression.evalute(...),要么是调用 XPath.evaluate(...) 便捷方法之一。允许的 QName 值指定为 XPathConstants 类中的常量,它们是:

当请求 Boolean 返回类型时,如果选中了一个或多个节点,则返回 Boolean.TRUE,否则返回 Boolean.FALSE

String 返回类型是从文本节点、注释节点或指令处理节点检索字符数据的便捷方法。当用于元素节点上时,返回子文本节点的值。

Number 返回类型尝试将节点的文本组合到 double 数据类型。

XPath 上下文

XPath 位置路径可以相对于文档中的特殊节点,称为 context。考虑以下 XML 文档:

<widgets>
<widget>
<manufacturer/>
<dimensions/>
</widget>
</widgets>

可以通过以下 XPath API 代码选择 <widget> 元素:

// parse the XML as a W3C Document
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new File("/widgets.xml"));

XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget";
Node widgetNode = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);

通过引用 <widget> 元素,现在可以编写相对 XPath 表达式来选择 <manufacturer> 子元素:

XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "manufacturer";
Node manufacturerNode = (Node) xpath.evaluate(expression, widgetNode, XPathConstants.NODE);


JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策