javax.xml.xpath (Java 2 Platform SE 6)
软件包 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 ]
。以下示例选择包含值为 true
的 include
属性的所有 <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
类中的常量,它们是:
XPathConstants.NODESET
XPathConstants.NODE
XPathConstants.STRING
XPathConstants.BOOLEAN
XPathConstants.NUMBER
当请求 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);
- Author Ben Galbraith
- Author Norman Walsh
- Author Jeff Suttor
- See XML Path Language (XPath) Version 1.0
- Since 1.5