XPath(2/2)
ステップ(Step)
ステップは、以下に示したパターンで記述されます。軸を使った形式のステップは「軸ステップ(AxisStep)」と言います。2つ目の書式は述語を省略したパターンです。
- 軸 + ノードテスト[述語(繰り返し可能)]
- 軸 + ノードテスト
- フィルタ
以下では、ステップの構成要素である、軸、ノードテスト、述語、フィルタについて説明します。
軸(Axis)
軸とは、ステップを使用して選択するノードとコンテキストノードとの間のツリー上の位置関係を指定する方法のことです。軸の指定方法には、XMLツリーの順方向に向かう指定方法(前方軸)とXMLツリーの逆方向に向かう指定方法(後方軸)があります。軸は「child::」のように、軸の名前と「::」の組み合わせで記述します。
軸の種類
以下の表に、軸の種類を方向別にまとめました。
| 軸 | 説明 |
| child | コンテキストノードの子ノードの集合。 |
| descendant | コンテキストノードの子孫ノードの集合。 |
| attribute | コンテキストノードの属性の集合。 |
| self | コンテキストノード自身の集合。 |
| descendant-or-self | コンテキストノードとその子孫ノードの集合。 |
| following-sibling | コンテキストノードの後ろにあるすべての兄弟ノードの集合。 |
| following | コンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノード以降にあるすべてのノードの集合。 |
| namespace | コンテキストノードの名前空間の集合。 |
| 軸 | 説明 |
| parent | コンテキストノードの親ノードの集合。 |
| ancestor | コンテキスト ノードの祖先ノードの集合。 |
| preceding-sibling | コンテキストノードの前にあるすべての兄弟ノードの集合。 |
| preceding | コンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノードより前にあるすべてのノードの集合。 |
| ancestor-or-self | コンテキストノードとその祖先ノードの集合。 |
軸の省略記述
軸のうちの以下に示したものは、省略した形で記述することができます。
- child:: → 記述なし
- attribute::ノードテスト → 「@ノードテスト」
- parent:: → 「..」
以下は、child::を省略した例です。
/child::players/child::player[child::name= 'イチロー']
/players/player[name.='イチロー']
ノードテスト(NodeTest)
ノードテストとは、選択するノードの種類や名前を指定する方法のことで、軸によって選択されたノード集合に、さらに条件を付加します。ノードテストは、以下の2通りによって表現されます。
- ノードの種類(要素、属性、テキスト、ドキュメント、処理命令)
- ノード名(QNameまたはワイルドカード「*」)
以下の表に、ノードテストをノードの種類で指定する方法の主なものをまとめました。
| ノード型の指定 | 説明 |
| node() | すべてのノードにマッチする。 |
| text() | すべてのテキストノードにマッチする。 |
| comment() | すべてのコメントノードにマッチする。 |
| element() | すべての要素ノードにマッチする。 |
| attribute() | すべての属性ノードにマッチする。 |
| document-node() | すべてのドキュメントノードにマッチする。 |
述語(Predicate)
述語とは、ノードテストで選出されたノード集合を、さらに振り分けするために該当ノードの条件を記述する方式です。述語は以下の書式に示すように、式を"["と"]"で囲んで記述します。
述語 ::= "[" 式 "]"
フィルタ(Filter)
フィルタはそれ自体で、ステップを構成することができ、基本式と述語の組み合わせで構成されます。
フィルタ ::= 基本式[述語(繰り返し可能)]
演算子
XPathでは、数値計算や、比較、論理条件を指定するための演算子を用意しています。以下に演算子を種類別にまとめました。
数式(Arithmetic Expressions)
数式は、加減剰余の四則演算で使用する演算子を定義しています。以下の表に四則演算で使用する演算子をまとめました。
| 演算子 | 意味 | 使用例 |
| + | 加算 | $a + $b |
| - | 減算 | $a - $b |
| * | 乗算 | $a * $b |
| div | 除算 | $a div $b |
| mod | 剰余演算 | $a mod $b |
比較式(Comparison Expressions)
比較式は、2つの値を比較します。以下の表に比較式の演算子をまとめました。
| 演算子 | 意味 | 使用例 |
| eq または = | 等しい | $a eq $b または $a=$b |
| ne または != | 等しくない | $a ne $b または $a!=$b |
| lt または < | より小さい | $a lt $b または $a<$b |
| le または <= | 以下 | $a le $b または $a<=$b |
| gt または > | より大きい | $a gt $b または $a>$b |
| ge または >= | 以上 | $a ge $b または $a>=$b |
論理式(Logical Expressions)
論理式は、条件式をand、orで判定します。以下の表に論理式の演算子をまとめました。
| 演算子 | 意味 | 使用例 |
| and | 2つの条件をAnd条件で真偽値判定する | 条件1 and 条件2 |
| or | 2つの条件をOr条件で真偽値判定する | 条件1 or 条件2 |
