JavaTM Platform
Standard Ed. 6

パッケージ javax.xml.xpath

このパッケージは、XPath 式を評価するための「オブジェクトモデルに依存しない」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 XPathFactoryConfigurationExceptionXPathFactory 環境の構成エラーを表します。
XPathFunctionException XPathFunctionException は XPath 関数のエラーを表します。
 

パッケージ javax.xml.xpath の説明

このパッケージは、XPath 式を評価するための「オブジェクトモデルに依存しない」API を提供し、評価環境にアクセスします。

次の XML 標準が適用されます。


XPath の概要

XPath 言語は、XML ドキュメントからノードを選択するための単純で簡潔な構文を提供します。また、XML ドキュメントオブジェクトモデル (DOM) ツリーのノードを boolean、double、または string 値に変換するための規則も提供します。XPath は W3C によって定義された言語であり、公式の W3C 勧告です。 W3C は XML Path Language (XPath) Version 1.0 仕様をホストしています。

XPath は 1999 年に XSLT および XPointer 言語の補足として誕生しましたが、最近では独立した言語として、また多くの DOM API コードの代わりに使用できる単一の XPath 式として普及してきました。

XPath 式

XPath 式は、1 つの「ロケーションパス」、および 1 つまたは複数の「プレディケート」で構成されます。式には XPath 変数が含まれる場合もあります。

簡単な XPath 式の例を次に示します。

/foo/bar

この例は、次のような XML ドキュメントの <bar> 要素を選択します。

<foo>
<bar/>
</foo>

/foo/bar は、ロケーションパスの例です。XPath のロケーションパスは Unix スタイルのファイルシステムパスに似ていますが、XPath 式では式にマッチする「すべての」ノードを返すという点が重要な相違です。したがって、/foo/bar 式によって次のドキュメントの 3 つすべての <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 ドキュメントから 1 つまたは複数のノードを選択する場合の例を次に示します。

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(...) 簡易メソッドの 1 つになります。許可される QName 値は、次のように XPathConstants クラスの定数として指定されています。

Boolean 型戻り値が要求されると、1 つまたは複数のノードが選択されている場合は 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 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。