XPath の演算子
XPath で定義されているすべての演算子を次に示します。
乗除算演算子
+
(加算)
1 つの数値を別の数値に足します。
-
(減算)
1 つの数値を別の数値から引きます。
*
(乗算)
1 つの数値に別の数値を掛けます。
div
2 つの数値間で浮動小数点除算を実行します。
mod
1 つの数値を別の数値で割った余りの浮動小数点を返します。
ブール演算子
=
2 つの式が等しいかどうかをテストします。
<
最初の式が 2 番目の式より少ないかどうかをテストします。この演算子は、属性内で
& lt;
と記述する必要があります。
< =
最初の式が 2 番目の式以下かどうかをテストします。この演算子は、属性内で
& lt;=
と記述する必要があります。
>
最初の式が 2 番目の式より大きいどうかをテストします。この演算子は、属性内で
& gt;
と記述できます。
> =
最初の式が 2 番目の式以上かどうかをテストします。この演算子は、属性内で
& gt;=
と記述できます。
!=
2 つの式が等しくないかどうかをテストします。
and
最初の式と 2 番目の式の両方が
true
であるかどうかをテストします。最初の式が
false
である場合、2 番目の式は評価されません。
or
最初の式と 2 番目の式のいずれかが
true
であるかどうかをテストします。最初の式が
true
である場合、2 番目の式は評価されません。
さまざまなデータタイプの値の比較
最初の 6 個のブール演算子では、さまざまなデータタイプの値の比較は複雑です。ここでは、さまざまな可能性について説明します。
両方のオブジェクトがブール値の場合
同じ値の場合は、両方のオブジェクトは等しくなります。"より少ない" または "より大きい" の比較では、
false
は
true
より小さいと見なされます。関数呼び出し
number(false())
は
0
を返し、
number(true())
は
1
を返します。
両方のオブジェクトが数値の場合
この場合、演算子は予期どおりに動作します。
両方のオブジェクトが文字列の場合
それらの Unicode 文字が同じである場合、両方のオブジェクトは等しくなります。"より小さい" および "より大きい" の比較では、文字コードが比較されます。
いずれのオブジェクトもノードセットでなく、演算子が = または != の場合
この場合は 2 つのオブジェクトが同じオブジェクトタイプに変換され、比較は前に説明したように動作します。オブジェクトの 1 つがブール値の場合、オブジェクトは
boolean()
関数を呼び出したかのようにブール値に変換されます。いずれのオブジェクトもブール値でない場合は、数値への変換が次に試みられます。オブジェクトの 1 つが数値の場合、オブジェクトは
number()
関数を呼び出したかのように数値に変換されます。それ以外の場合、すべてのオブジェクトは
string()
関数を呼び出したかのように文字列に変換されます。
いずれのオブジェクトもノードセットでなく、演算子が <、 >、または > = の場合
この場合、オブジェクトは数値に変換されて比較されます。
オブジェクトの 1 つまたは両方がノードセットの場合
この場合は非常に複雑です。両方のオブジェクトがノードセットの場合、最初のノードセットの少なくとも 1 つのノードの文字列値が、2 番目のノードセットの少なくとも 1 つのノードの文字列値に等しい場合、比較は true になります。1 つのオブジェクトがノードセットで、もう 1 つのオブジェクトが数値、文字列、またはブール値の場合、ノードセット内に、数値、文字列値、またはブール値がもう 1 つのオブジェクトの数値、文字列値、またはブール値に等しいノードが少なくとも 1 つあるときは、比較は true になります。
式演算子
/
場所のパスで手順を区別するために使用されるステップ演算子。XPath 式が
/
で始まる場合、ドキュメントのルートを表します。
//
descendant-or-self
軸の短縮された構文。
.
self
軸の短縮された構文。
..
parent
軸の短縮された構文。
@
attribute
軸の短縮された構文。
|
集合演算子。たとえば、要素
< xsl:template match= " a|b " >
の
match
属性はすべての
< a >
および
< b >
要素に一致します。
*
主要なノードタイプの任意のノードを表すワイルドカード。
child::*
は、コンテキストノードのすべての子要素を選択し、
attribute::*
はコンテキストノードのすべての属性を選択するなどです。
*
は、短縮された構文を使用して、コンテキストノードのすべての子要素を選択し、
@*
はコンテキストノードのすべての属性を選択します。ワイルドカード演算子を
node()
ノードテストと比較してください。このノードテストは、タイプとは無関係に任意のノードに一致させます。
[]
ノードのグループをフィルタする述語式を含めるために使用される述語演算子。
$
指定された記号が変数名であることを示すために使用される変数演算子。