すでに「XPath 2.0」が存在している現在ですが、あえて XPath 1.0 に定義されているコア関数を見ていきます(記事一覧)。 XPath 1.0 仕様書「4.1 Node Set Functions」参照。
各関数を見ていく前に2つほど補足を。
- 関数の引数と返り値で使用される変数の型については、たとえば拙者の以前の記事を参照。
- 関数を評価するには通常、コンテキストを用います。 コンテキストとは次の
4つ5つからなります:- コンテキスト・ノード : 式を評価しているノード
- コンテキスト位置とコンテキスト・サイズ : コンテキスト・ノードの位置と個数
- 変数のセット
- 関数ライブラリ
- 名前空間宣言のセット
また、XPath 1.0 の関数は、大まかに分けて次の4つに分類できます:
- ノードセット関数 (Node Set Functions)
- ブール関数 (Boolean Functions)
- 数値関数 (Number Functions)
- 文字列関数 (String Functions)
これらを踏まえて、今回はノードセット関数を見ていきます。
関数のシグニチャ
関数名 | シグネチャ | 返り値の型 | 説明 |
---|---|---|---|
last() | last() | number | コンテキスト・ノードの個数を返す |
position() | position() | number | コンテキスト位置を返す |
count() | count(node-set) | number | 引数のノードセットの個数を返す |
id() | id(object) | node-set | id で指定されたノードを返す |
local-name() | local-name(node-set?) | string | 引数のノードのローカル名を返す |
namespace-uri() | namespace-uri(node-set?) | string | 引数のノードの名前空間 URI を返す |
name() | name(node-set?) | string | 引数のノードの展開名を返す |
関数の説明とサンプル
以下では、ノードセット関数をほんのチョットだけ詳しく見ていきますが、その前にそれらの説明で用いるサンプルの XML 文書を載せておきます:
<?xml version="1.0"?> <gr:Groovy-Projects xmlns:gr="groovy-world"> <gr:Groovy latest-version="1.7.2"> <url>http://groovy.codehaus.org/</url> <description>An agile dynamic language for the Java Platform</description> </gr:Groovy> <gr:Gant latest-version="1.9.2"> <url>http://gant.codehaus.org/</url> <description>A Groovy-based build system that uses Ant tasks, but no XML.</description> </gr:Gant> <gr:GMaven latest-version="1.2"> <url>http://docs.codehaus.org/display/GMAVEN/Home</url> <description>GMaven provides integration of Groovy into Maven.</description> </gr:GMaven> <gr:Griffon latest-version="0.3.1"> <url>http://griffon.codehaus.org/</url> <description>A Grails-like Rich Internet Framework</description> </gr:Griffon> <gr:Grails latest-version="1.3.1"> <url>http://grails.org/</url> <description>a Groovy-based web framework inspired by Ruby on Rails</description> </gr:Grails> </gr:Groovy-Projects>
では、各関数の説明へ GO!
last() 関数
式を評価しているコンテキストでのコンテキスト・サイズを返す。
シグニチャ
last() : number
サンプルの XPath 式
//*[last() = 5]
サンプルの評価結果
position() 関数
式を評価しているコンテキストでのコンテキスト位置を返す。
シグニチャ
position() : number
サンプルの XPath 式
/Groovy-Projects/*[position() = 1]
サンプルの評価結果
"Groovy" (文字列)
count() 関数
引数のノードセットに含まれるノードの個数を返す。
シグニチャ
count(node-set) : number
サンプルの XPath 式
count(/Groovy-Projects/*)
サンプルの評価結果
5 (数値)
id() 関数
ID によって指定された要素を返す。
- 引数がノードセット以外の場合、
- string() 関数によって文字列に変換する
- その文字列を空白によってトークンに分割する
- これらのトークンのいずれかと同じ ID をもつノードを探す
- 見つかった全てのノード集めて、ノードセットとして返す
- 引数がノードセットの場合、各ノードに対して
- string() 関数によって文字列に変換する
- この文字列に対して上記の「引数がノードセット以外の場合」を適用し、ノードセットを取得する
という手順を適用し、得られた結果のノードセットの合併をノードセットとして返す。
シグニチャ
id(object) : node-set
local-name() 関数
引数のノードのローカル名を返す。 もう少し正確には
- 引数のノードセットの(文書順での)最初のノードに対して、その展開名のローカル部分(ローカル名)を返す。
- 「引数のノードセットが空」または「最初のノードが展開名を持たない」なら、空文字列を返す。
- 引数が省略された場合は、コンテキスト・ノードのみを含むノードセットが引数として渡される。
シグニチャ
local-name(node-set?) : string
サンプルの XPath 式
local-name(/Groovy-Projects/*[position() = 2])
サンプルの評価結果
"Gant" (文字列)
namespace-uri() 関数
引数のノードの名前空間 URI を返す。 もう少し正確には
- 引数のノードセットの(文書順での)最初のノードに対して、その展開名の名前空間 URI を返す。
- 「引数のノードセットが空」、「最初のノードが展開名を持たない」、「展開名の名前空間 URI が null」なら、空文字列を返す。
- 引数が省略された場合は、コンテキスト・ノードのみを含むノードセットが引数として渡される。
シグニチャ
namespace-uri(node-set?) : string
サンプルの XPath 式
namespace-uri(/Groovy-Projects/*[position() = 3])
サンプルの評価結果
"groovy-world" (文字列)
name() 関数
引数のノードの展開名 (expanded-name) を返す。 もう少し正確には
- 引数のノードセットの(文書順で)最初のノードの展開名を表す文字列を返す。
- 引数のノードセットが空か、もしくは最初のノードが展開名を持たないなら、空文字列 ("") を返す。
- 引数が省略された場合、コンテキスト・ノード(を唯一含むノードセット)が引数として渡される。
要素と属性以外のノードに対して name() 関数を呼び出した結果は、local-name() 関数を呼び出した結果と同じになる。
シグニチャ
name(node-set?) : string
サンプルの XPath 式
name(/Groovy-Projects/*[position() = 4])
サンプルの評価結果
"gr:Griffon" (文字列)
- 作者: エリック・T・レイ,Erik T.Ray,宮下尚,牧野聡,立堀道昭
- 出版社/メーカー: オライリージャパン
- 発売日: 2004/06
- メディア: 単行本
- 購入: 3人 クリック: 62回
- この商品を含むブログ (21件) を見る