サーチ…
備考
XPath ロケーションパスは、 /
characterで区切られた一連のロケーションステップです 。
step1/step2/step3
ロケーション・ステップには、 軸 、 ノード・テスト 、およびオプションの述部リストが含まれています 。 軸とノードテストは 、二つのコロン文字によって分離されている::
。 述部は角カッコで囲まれています。
axis::nodeTest[predicate1][predicate2]
ロケーションパスの評価は、式のコンテキストによって与えられるコンテキストノードを含むノードセットから始まり、ロケーションパスが/
始まる場合はルートノードから始まります。各ステップで、元のノード集合内の各ノードNは、
- 与えられた軸に沿って Nから到達することができ、
- ノードテストと一致し、
- すべての述語に一致します。
ロケーションパス式の結果は、すべてのロケーションステップを処理した後に得られた最終ノードセットです 。
子要素をトラバースする
child
軸を使用してルートノードから子孫要素に移動する:
/child::html/child::body/child::div/child::span
child
軸がデフォルトの軸であるため、これは省略可能です:
/html/body/div/span
すべての子孫をトラバースする
descendant
およびdescendant-or-self
軸は、任意の深さのノードのすべての子孫要素を見つけるために使用できます。これとは対照的に、 child
軸にのみ直接の子を横断します。
/child::html/descendant::span
/child::html/descendant-or-self::*
ダブルスラッシュ//
ショートカットです/descendant-or-self::node()/
。したがって、次の式は等価です。
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
祖先を横断する
parent
軸には、ノードの親だけが含まれます。次の式は、 body
要素を迂回してhtml
要素を選択します。
/child::html/child::body/parent::html
..
はparent::node()
ショートカット..
ancestor
とancestor-or-self
軸は、ノードのすべての祖先を横断します。次の式は、コンテキストノードの祖先であるすべてのdiv
要素を返します。
ancestor::div
「自己」軸
self
軸には、コンテキストノード自体だけが含まれます。式.
self::node()
ショートカットであり、常にコンテキストノードに一致します。 .
ショートカットはコンテキストノードの子孫を列挙するのに便利です。次の式は等価です。
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
self
軸は、XPath 1.0述語で役立ちます。たとえば、コンテキストノードのすべてのh1
、 h2
、およびh3
子を選択するには、次のようにします。
*[self::h1 or self::h2 or self::h3]
後続ノードと先行ノードを横断する
following-sibling
およびpreceding-sibling
軸には、コンテキストノードの前後にある兄弟が含まれ、 following
軸およびpreceding
軸には、コンテキストノードの前後にあるドキュメント内のすべてのノードが含まれますが、
- これらの軸のいずれも属性または名前空間ノードを含んでいません。
-
following
軸には子孫が含まれていません。 -
preceding
軸には祖先は含まれていません。
例:
following::span[1]
following-sibling::*[last()]
属性および名前空間ノードのトラバース
attribute
およびnamespace
軸には、要素のすべての属性および名前空間ノードが含まれます。ショートカット@
はattribute::
略語なので、以下は同じです:
child::div/attribute::class
div/@class