例 1
基本的な XPath 構文は、ファイル システム内のファイルの検索に似ています。パスがスラッシュ / で始まる場合、そのパスは要素への絶対パスを表します。
/AAA
ルート要素 AAA
を選択します
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA/CCC
AAA
の CCC サブ要素をすべて選択します
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA/DDD/BBB
DDD のすべてのサブ要素、AAA のサブ要素を選択します
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>
例 2
パスは二重スラッシュで終わります // 最初は、文書内の二重スラッシュ以降の規則を満たすすべての要素を選択することを意味します // (階層関係に関係なく) // BBB
BBB 要素をすべて選択します
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> //DDD/BBB
すべて選択親要素が DDD である BBB 要素
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA>
インスタンス 3
アスタリスク* は、アスタリスクの前のパスにあるすべての要素を選択することを意味します
/AAA/CCC/DDD/*
パスが /AAA/ に関連付けられているすべての要素を選択するCCC/DDD
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA> /*/*/*/BBB
祖先要素のBBB要素が3つある全要素を選択
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA> //*
全要素を選択
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA>
例4
平方数値内の式は、要素をさらに指定できます。数値は、要素の位置を表します。選択セット内の要素、last() 関数は Select the last element in the set.
/AAA/BBB[1]
Select the first BBB sub-element of AAA
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> /AAA/BBB[last()]
Select the last AAA の BBB サブ要素
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA>
例 5
//@id
id 属性をすべて選択
<AAA> <BBB id = \"b1\"/> <BBB id = \"b2\"/> <BBB name = \"bbb\"/> <BBB/> </AAA> //BBB[@id]
id 属性を持つ BBB 要素を選択する
<AAA> <BBB id = \"b1\"/> <BBB id = \"b2\"/> <BBB name = \"bbb\"/> <BBB/> </AAA> //BBB[@name]
name 属性を持つ BBB 要素を選択する
<AAA> <BBB id = \"b1\"/> <BBB id = \"b2\"/> <BBB name = \"bbb\"/> <BBB/> </AAA> //BBB[@*]
<AAA> <BBB id = \"b1\"/> <BBB id = \"b2\"/> <BBB name = \"bbb\"/> <BBB/> </AAA> //BBB[not(@*)]
<AAA> <BBB id = \"b1\"/> <BBB id = \"b2\"/> <BBB name = \"bbb\"/> <BBB/> </AAA>
normalize-space 関数は、先頭と末尾のスペースを選択基準として使用できます。連続するスペース文字列を単一のスペース文字列に置き換えます
属性 ID を含み、その値が 'b1' である BBB 要素を選択します
<AAA> <BBB id = \"b1\"/> <BBB name = \" bbb \"/> <BBB name = \"bbb\"/> </AAA> //BBB[@name=\'bbb\']
<AAA> <BBB id = \"b1\"/> <BBB name = \" bbb \"/> <BBB name = \"bbb\"/> </AAA> //BBB[normalize-space(@name)=\'bbb\']
<AAA> <BBB id = \"b1\"/> <BBB name = \" bbb \"/> <BBB name = \"bbb\"/> </AAA>
//*[count(BBB)=2]
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> //*[count(*)=2]
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> //*[count(*)=3]
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA>
//*[ name()='BBB']
BBB という名前の要素をすべて選択します (ここでは //BBB に相当します)
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> //*[starts-with(name(),\'B\')]
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> //*[contains(name(),\'C\')]
<AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA>
例 9
区切り文字を使用して複数のパスを結合できます
// CCC | //BBB
すべての CCC 要素と BBB 要素を選択します
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> /AAA/EEE | //BBB
すべての BBB 要素とすべての EEE 要素を選択しますAAA
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> /AAA/EEE | //DDD/CCC | /AAA | //BBB
マージできるパスの数に制限はありません
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA>
例 10
子軸 (axis) には、デフォルトの軸としてコンテキスト ノードの子要素が含まれています。
/AAA
は /child::AAA と同等です
<AAA> <BBB/> <CCC/> </AAA> /child::AAA
は /AAA
と同等です
<AAA> <BBB/> <CCC/> </AAA>
/AAA/BBB
は /child::AAA/child と同等です。 ::BBB
<AAA> <BBB/> <CCC/> </AAA>
<AAA> <BBB/> <CCC/> </AAA>
<AAA> <BBB/> <CCC/> </AAA>
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> /AAA/BBB/descendant::*
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> //CCC/descendant::*
<AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> </AAA>