JavaTM 2 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 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only