インタフェース | 説明 |
---|---|
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 関数のエラーを表します。 |
このパッケージは、XPath 式の評価と評価環境へのアクセスに使用する、オブジェクトモデルに依存しない API を提供します。
次の XML 標準が適用されます。
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 式は、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 を使用して、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 式は XML ドキュメントのノードを選択しますが、XPath API は選択されたノードを次に示すほかのデータ型のいずれかに合体させることができます。
Boolean
Number
String
望ましい戻り値の型は、式を評価するために使われたメソッド呼び出しの QName
パラメータで指定されています。これは、XPathExpression.evalute(...)
の呼び出しか、XPath.evaluate(...)
簡易メソッドの 1 つになります。許可される QName 値は、次のように XPathConstants
クラスの定数として指定されています。
XPathConstants.NODESET
XPathConstants.NODE
XPathConstants.STRING
XPathConstants.BOOLEAN
XPathConstants.NUMBER
Boolean
型戻り値が要求されると、1 つまたは複数のノードが選択されている場合は Boolean.TRUE
が返され、そうでない場合は Boolean.FALSE
が返されます。
String
戻り値型は、テキストノード、属性ノード、コメントノード、または処理の指示ノードから文字データを取得する場合に便利です。要素ノードに使うと、子テキストノードの値が返されます。
Number
戻り値型は、ノードのテキストを double
データ型に合体させます。
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);
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.