基本はツリーとノードを理解すること
ノードを整理
前編で「ノードから構成されるツリー」などという表現を使いましたが、具体的にノードとは何かということについては説明しませんでした。実は、このノードを理解しないとXPath式は書けないと言っても過言ではないのです。まずはノードの種類をXML Path Language (XPath) Version 1.0を参考に次に示します。
ルートノード
XML文書そのものを指します。ファイルシステムのルートと同じです。ロケーションパス(後述)でも「/」のように記述する点でも似ています。Meigara.xmlのMEIGARASやshop.xmlのSHOPはルートノードの子ノードになる点に注意してください。
要素ノード
XML文書の要素とノードが同じものを表すと思いがちですが、要素もノードの1つです。
テキストノード
文字データはグループ化されノードとなります。従ってテキストノードの前後の兄弟ノードにテキストノードは存在しません。
属性ノード
属性もまたノードになります。要素ノードは関連する属性ノードの親となります。ただし、属性ノードはその要素ノードの子ではありません。
名前空間ノード
名前空間もまたノードになります。要素ノードは名前空間ノードの親となります。ただし、名前空間ノードはその要素ノードの子ではありません。名前空間ノードでは理解は簡単ですが、属性ノードがなぜ要素ノードの子ではないのか最初は戸惑います。
処理命令ノード
処理命令もまたノードになります。ただし、文書タイプ宣言内の処理命令は例外です。
コメントノード
属性、名前空間、処理命令がノードだと言われれば、そういう構造も可能だと受け入れることはできますが、コメントもノードだと言われると少し疑いたくなります。しかし、コメントもまたノードです。
shop.xmlをツリーで表現
表1のノード一覧を参考に図1にMeigara.xml、図2にshop.xmlをツリー構造として表現しています。見やすいように、MEIGARAの子要素はVOLUMEとPRICEを割愛しています。また、MEIGARA要素も3つ存在しますが、最初の1件のみとしています。
XSLTにおいて空白文字とは、スペース、復帰、改行、タブの4つを指します。従って、ルートノードとMEIGARAS要素ノード(Meigara.xmlの場合)またはSHOP要素ノード(shop.xmlの場合)以外は必ず、空白文字に囲まれています。


