XPathパッケージ

 

XMLで利用するXPathを扱うためのパッケージです。

XPathパッケージはW3CWorld Wide Web Consortium)で策定されているDOMDocument Object ModelLevel 3 XPath Version1.0の一部の機能を除いたサブセットです。

 

クラス

 

名前

説明

Version

PC

Mobile

AI

XPathEvaluator

XPathの各オブジェクトを生成するクラスです

4.0.0

-

-

XPathException

XPathパッケージで発生する例外です

4.0.0

-

-

XPathExpression

XPathの構文解析を行います

4.0.0

-

-

XPathNSResolver

XPathの評価で名前空間のプレフィックスを解決するためのクラスです

4.0.0

-

-

XPathResult

XPathの結果を保持します

4.0.0

-

-

 

W3C DOM Level3 XPathについて

 

W3Cにより公開されているDocument Object Model (DOM) Level 3 XPath Specification Version 1.0は、Biz/Browser ver4.0.0のリリース時点(20038月)でCandidate Recommendationです。

今後も、W3Cにより仕様策定が続けられますが、Biz/Browser ver3.0に組み込まれている機能については、既に概ね仕様が確定している部分に止めているため、大きな変更は受けないと推定されます。

 

サポートされないオブジェクト

 

W3C DOM Level3 XPathに含まれる以下のオブジェクトは、Biz/Browserではサポート外となり利用することはできません。

 

XPathNamespaceインターフェース

 

XPath構文(Expression) の互換性について

 

利用できるXPath構文は、W3Cにより勧告されているXML Path Language (XPath) Version 1.0 W3C Recommendation 16 November 1999の文書に以下の点を除き準拠しています。

 

1. 数値はすべて符号付整数で表現されます。

2. 名前空間の解決で相対パスを考慮しません。

3. 名前空間の解決でXPathResolverが解決可能なデフォルトネームスペースのみ参照します。通常は、DocumentElementで定義されたデフォルトネームスペースです。コンテキストノードに応じたデフォルトネームスペースを扱うことはできません。

4. XPathNamespaceインタフェースを利用する操作は、アトリビュート操作に代替されます。また、結果としてXPathNamespaceオブジェクトが選択される局面では、XmlAttrオブジェクトで代替されます。

5. XPathの評価結果は常にORDERED_NODE_SNAPSHOT_TYPEです。数値や文字列、イテレータなど他の型を指定した場合、ORDERD_NODE_SNAPSHOTから変換された結果が返されます。

 

Biz/Browserでは、ver3.0よりXmlNode.SelectNodesXmlNode.SelectSingleNodeメソッドで簡易的にXPath構文のサブセットを利用してNodeを検索することができましたが、ver4.0.0より拡張されたXPathパッケージのXPath構文とは互換性がありません。利用する際には挙動のちがいに注意してください。

 

典型的な利用方法

 

XPathパッケージは、XPathEvaluatorクラスのスタティックメソッドにより、XPathNSResolverオブジェクト、XPathExpressionオブジェクトを生成し、XPathExpression.EvauateメソッドによりXPath構文を評価し、XPathResultオブジェクトで結果を受け取ります。

 

/* XML文書をダウンロードします*/
var session = getHttpSession();
var response = session.Get("data.xml");
 
/* DOMツリーを作成します */
var domImpl = new XmlDOMImplementation;
var dom = domImpl.Load(response);
 
/* XPathによる検索を準備します*/
var resolver = XPathEvaluator.CreateNSResolver(dom);
var expression = XPathEvaluator.CreateExpression("//x", resolver);
 
/* 検索を実行します */
var result = expression.Evaluate(dom.documentElement, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);
 
/* 検索結果を確認します */
var len = result.SnapshotLength;
for (var i = 0; i < len; i++) {
    var node = result.SnapshotItem(i);
    print("No " + str(i + 1) + ": " + node.xml, "\n");
}
 
----- 実行結果 -----
No 1: <x name="x1">
No 2: <x name="x2">
No 3: <x name="x3">
No 4: <x name="x4">
No 5: <x name="x5">

 

XPath構文例

 

child::para

para

コンテキストノードの子からparaノードを選択します。

 

child::*

*

コンテキストノードの子ノード全てを選択します。

 

child::text()

text()

コンテキストノードの子ノードの内、空でないtextノードを全て選択します。

 

child::node()

node()

コンテキストノードの子ノード全てを選択します。

 

attribute::name

@name

コンテキストノードのnameアトリビュートを選択します。

 

attribute::*

@*

コンテキストノードの全てのアトリビュートを選択します。

 

descendant::para

コンテキストノードの子孫から全てのparaノードを選択します。

 

ancestor::div

コンテキストノードの先祖から全てのdivノードを選択します。

 

ancestor-or-self::div

コンテキストノードとその先祖から全てのdivノードを選択します。

 

descendant-or-self::para

コンテキストノードとその子孫から全てのparaノードを選択します。

 

self::para

コンテキストノードがparaの場合コンテキストノードを選択します。

 

child::chapter/descendant::para

chapter//para

コンテキストノードの子chapterノードの子孫から全てのparaノードを選択します。

 

child::*/child::para

*/para

コンテキストノードの孫ノードから全てのparaノードを選択します。

 

/

先頭に指定された場合、ドキュメントルートを選択します。

 

/descendant::para

ドキュメント内の全てのparaノードを選択します。

 

/descendant::olist/child::item

ドキュメント内のolistノードの子からitemノードを全て選択します。

 

child::para[position()=1]

para[1]

コンテキストノードの子ノードから先頭のparaノードを選択します。

 

child::para[position()=last()]

para[last()]

コンテキストノードの子ノードから最後のparaノードを選択します。

 

child::para[position()=last()-1]

para[last()-1]

コンテキストノードの子ノードから最後から2番目のparaノードを選択します。

 

child::para[position()>1]

コンテキストノードの子ノードから2番目以降のparaノードを全てを選択します。

 

following-sibling::chapter[position()=1]

コンテキストノードに後続する兄弟から最初のchapterノードを選択します。

 

preceding-sibling::chapter[position()=1]

コンテキストノードに先行する兄弟から先頭のchapterノードを選択します。

 

/descendant::figure[position()=42]

ドキュメント内の全てのfigureノードから42番目のノードを選択します。

 

/child::doc/child::chapter[position()=5]/child::section[position()=2]

/doc/chapter[5]/section[2]

ドキュメントエレメントdocの子から5番目のchapter2番目のsectionノードを選択します。

 

child::para[attribute::type="warning"]

para[@type="warning"]

コンテキストノードの子からtypeアトリビュートに"warning"を持つすべてのparaノードを選択します。

 

child::para[attribute::type="warning"][position()=5]

para[@type='warning'][5]

コンテキストノードの子からtypeアトリビュートに"warning"を持つ5番目のparaノードを選択します。

 

child::para[position()=5][attribute::type="warning"]

para[5][@type="warning"]

コンテキストノードの子から5番目のparaノードのtypeアトリビュートに"warning"を持っていれば選択します。

 

child::chapter[child::title="Introduction"]

chapter[title="Introduction"]

コンテキストノードの子ノードchapterの内、title"Introduction"を持つノードを選択します。

 

child::chapter[child::title]

chapter[title]

コンテキストノードの子ノードchapterの内、titleノードを子に持つノードを選択します。

 

child::*[self::chapter or self::appendix]

コンテキストノードの全ての子ノードの内、chapterノードかappendixノードを全てを選択します。

 

child::*[self::chapter or self::appendix][position()=last()]

コンテキストノードの全ての子ノードの内、chapterノードかappendixノードを持つ、最後のノードを選択します。

 

/descendant-or-self::node()/child::chapter[position()=2]

//chapter[2]

ドキュメント内の全てのノードの2番目のchapterノードを全て選択します。

 



「オンラインマニュアル」一覧へ戻る
「Bizの宝箱」TOPへ戻る