XPathコマンドの使用
XPathは、World Wide Web Consortium (W3C)によって開発された業界標準です。
これは、XMLドキュメントをナビゲートするために使用するメソッドです。 XPathは、XMLドキュメントの個々の部分に対処するための構文ルールのセットです。 わかっていない場合がありますが、すでにXPathが使用されています。RTFテンプレートでは、XPathを使用して実行時にXMLデータをナビゲートします。
この項では、XPathの原則について簡単に説明します。 XPathは、XMLドキュメントをノードのツリーとして解釈するDocument Object Model (DOM)に従います。 ノードは、次の7つのタイプのいずれかになります:
-
root
-
エレメント
-
属性
-
text
-
ネームスペース
-
処理命令
-
コメント
これらの要素の多くは、CDのカタログを含む次のサンプルXMLに示されています:
<?xml version="1.0" encoding="UTF-8"?>
<! - My CD Listing - >
<CATALOG>
<CD cattype=Folk>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD cattype=Rock>
<TITLE>Hide Your Heart</TITLE>
<ARTIST>Bonnie Tylor</ARTIST>
<COUNTRY>UK</COUNTRY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG>
この例のルート・ノードはCATALOGです。 CDは要素であり、属性cattypeがあります。 サンプルにはMy CD Listingというコメントが含まれています。 テキストはXML文書要素に含まれています。
データの特定
ロケーション・パス式を使用して、XMLドキュメント内の情報を検索します。
ノードは、最も一般的な検索要素です。 例CATALOG XMLのノードには、CD、TITLEおよびARTISTがあります。 パス式を使用して、XMLドキュメント内のノードを検索します。 たとえば、次のパスはすべてのCD要素を返します:
//CATALOG/CD
where
二重スラッシュ(//)は、文書内のレベルに関係なく、検索基準に一致するXML文書内のすべての要素が返されることを示します。
スラッシュ(/)は子ノードを区切ります。 パターンに一致するすべての要素が返されます。
個々のTITLE要素を取得するには、次のコマンドを使用します:
/CATALOG/CD/TITLE
この例では、次のXMLが返されます:
<CATALOG>
<CD cattype=Folk>
<TITLE>Empire Burlesque</TITLE>
</CD>
<CD cattype=Rock>
<TITLE>Hide Your Heart</TITLE>
</CD>
</CATALOG>
大カッコを使用して検索をさらに制限します。 ブラケットは、特定の子ノードまたは指定された値を持つ要素を検索します。 たとえば、次の式では、Bob Dylanによって記録されたすべてのCDが検索されます:
/CATALOG/CD[ARTIST="Bob Dylan"]
または、各CD要素にPRICE要素がない場合は、次の式を使用して、PRICE要素を含むCD要素のみを返すことができます:
/CATALOG/CD[PRICE]
検索で属性値を活用するには、カッコ表記法を使用します。 @記号を使用して属性を指定します。 たとえば、次の式はすべてのRock CD (cattype属性値がRockのすべてのCD)を検出します:
//CD[@cattype="Rock"]
これにより、サンプルXMLドキュメントから次のデータが返されます:
<CD cattype=Rock>
<TITLE>Hide Your Heart</TITLE>
<ARTIST>Bonnie Tylor</ARTIST>
<COUNTRY>UK</COUNTRY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
ブラケットを使用して、取得するアイテム番号を指定することもできます。 たとえば、最初のCD要素は、次のXPath式を使用してXMLドキュメントから読み取られます:
/CATALOG/CD[1]
サンプルは最初のCD要素を返します:
<CD cattype=Folk>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
XPathでは、指定したノードに含まれるすべての要素を取得するためのワイルドカードもサポートされています。 たとえば、サンプルXMLからすべてのCDを取得するには、次の式を使用します:
/CATALOG/*
文とブール演算子を組み合せて、より複雑な検索を実行できます。 次の式は、すべてのフォークCDとロックCDを取得するため、サンプルからすべての要素を取得します:
//CD[@cattype="Folk"]|//CD[@cattype="Rock"]
パイプ(|)は論理OR演算子と同じです。 さらに、XPathは論理ORおよびANDおよび等価演算子を認識: <=, <, >、>=、==および!=。 たとえば、次の式を使用すると、1985以降にリリースされたすべてのCDを見つけることができます:
/CATALOG/CD[YEAR >=1985]
開始参照
XPath式の最初の文字によって、XMLツリーで開始するポイントが決まります。
スラッシュ(/)で始まる文は絶対とみなされます。 スラッシュなしは相対参照を示します。 相対参照の例は次のとおりです:
CD/*
この文は、現在の参照ポイントで検索を開始します。 つまり、例が文のグループ内で発生した場合、前の文の左側にある参照ポイントが使用されます。
前述のとおり、二重スラッシュ(//)は、ドキュメント内のロケーションに関係なく一致するすべての要素を取得するため、パフォーマンスを向上させるために必要な場合にのみ、二重スラッシュ(//)を使用する必要があります。
コンテキストおよび親の指定
現在の要素と親要素を選択するために、XPathでは、ディレクトリのナビゲートに一般的に使用されるドット表記法が認識されます。
単一のピリオド(.)を使用して現在のノードを選択し、二重ピリオド(..)を使用して現在のノードの親を返します。 たとえば、現在のノードの親のすべての子ノードを取得するには、次を使用します:
../*
したがって、サンプルXMLからすべてのCDにアクセスするには、次の式を使用します:
/CATALOG/CD/..
次を使用して、1988年にリリースされたすべてのCDタイトルにアクセスすることもできます:
/CATALOG/CD/TITLE[../YEAR=1988]
2つのピリオド(..)を使用して要素のツリーを上に移動し、TITLEと同じレベルでYEAR要素を検索します。次に、1988に対する一致をテストします。 この場合、//を使用することもできますが、要素YEARがXMLドキュメントの他の場所で使用されている場合は、誤った結果になる可能性があります。
XPathは、RTFテンプレートと組み合せてテンプレートで条件付き書式設定およびフィルタリングを使用できる場合、非常に強力な標準です。