目次へ

3.3 ノードテスト

ノードテストとは、選択するノードのノード型と名前を指定するもののことをいい、軸によって選択されたノードの集合にさらに条件をつけます。以下に軸を含めたノードテストの構文を示します。

構文 意味
child::para コンテキストノードの para という名前の子要素を選択
コンテキストノードに para という名前の子要素がない場合には空
attribute::href コンテキストノードの href という名前の属性を選択
コンテキストノードに href という名前の属性がない場合には空
child::* コンテキストノードのすべての子要素を選択
attribute::* コンテキストノードのすべての属性を選択
child::text() コンテキストノードの子テキストノードを選択
child::node() ノード型に関係なく、コンテキストノードのすべての子ノードを選択

attribute::href のように名前を指定したノードテストを使う場合には、どの軸を指定したかによってノードテストの対象となるノードの型が限定されます。この限定されたノードの型のことを主ノード型といいます。たとえば、軸が attribute や namespace である場合には、 主ノード型はそれぞれ、属性ノードと名前空間ノードになります。 それ以外の軸の場合の主ノード型は要素ノードとなります。ここでの注意点は、例えば child::* というロケーションステップは、 「コンテキストノードの子供にあたるノードすべて」を表すのではなく、 その中の要素ノードだけに限定され、テキストノードは含まれないということです。 テキストノードには、以下で紹介する別の方法が用意されています。

一方で、名前を指定しないでノードの種類だけを指定できるようなものがあります。ノードテストに、 text(), comment(), processing-instruction() と指定すると、 それぞれテキストノードやコメントノード、処理命令ノードという種類でなければならないことを表します。

ノードの種類が何でもいい場合には、 node() とします。 つまり、「コンテキストノードの子ノードすべて」を表すには、 child::node() とすれば良いことになります。

3.4 ロケーションパス (詳細な記述方法)

式の詳細については後の章に譲ることにし、この節では詳細な記述法によるロケーションパスの具体例をいくつか挙げ説明します。

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

image

コンテキストノードは no 属性の値が 3 である track 要素とします。ロケーションパスの意味は、「コンテキストノードの次の兄弟要素である track 要素を選択する」ですので、選択される要素は no 属性の値が 4 である track 要素となります。
 following と preceding、following-sibling、preceding-sibling において position()=N とすると XML 文書中で対象となるノード集合中で N 番目の要素という意味ではなく、コンテキストノードから数えて N 番目の要素という意味となるので気をつけてください。

child::track[attribute::no="2"][position()=3]

image

コンテキストノードは trackListings とします。ロケーションパスの意味は、「コンテキストノードの子要素 track のうち no 属性が 2 の、3番目の要素を選択する」となります。上記の例の場合、 no 属性が 2 の track 要素は3つありますので、そのうちの3番目の要素を選択することになります。

child::track[position()=3][attribute::no="2"]

image

コンテキストノードは trackListings とします。ロケーションパスの意味は、「コンテキストノードの子要素 track のうち 3番目の要素の no 属性が 2 であればその track 要素を選択する」となります。この場合対象となるデータの no 属性は 3 ですから何も選択されないことになります。

child::trackListings[child::track]

image

コンテキストノードは cd とします。ロケーションパスの意味は、「コンテキストノードの子要素 trackListings のうち、track という子要素を一つ以上持つものを選択する」となります。この場合、trackListings は 4 つの track 要素を持っていますのでこの trackListings を選択することになります。

descendant::*[self::title or self::trackListings]

image

コンテキストノードは cd とします。ロケーションパスの意味は、「コンテキストノードの子孫要素のうち、title 要素、および trackListings 要素を選択する」となります。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp