比較式は、パスによって指定するノード固有の値が特定の値の範囲にある場合に真となる式です。
比較式の定義を以下に示します。
比較式 ::= 左辺値 比較演算子 右辺値 左辺値 ::= メソッド値 右辺値 ::= リテラル メソッド値 ::= パス
パスで示すノードの値は、パスを記述することで指定できます。比較式に指定するパスの値を参照するため、テキストノードまたは属性ノードを表している必要があります。
たとえば、「A要素のテキストノードの値が100であるXMLデータ」を表すパスは以下のように記述できます。
/A[text() = 100]
比較演算子に“<”、“<=”、“>”、“>=”を指定し、かつ比較式の右辺のリテラルが文字列型の場合、左辺に指定したノードの値と右辺に指定したリテラルの値を、文字コードに基づいて文字列として比較します。
比較式の左辺のメソッド値に指定したパスが複数のノードを指す場合があります。
1つはパスに指定した名前の要素が複数XMLデータ中に出現する場合です。
もう1つの場合は、パス演算子“//”や“*”“@*”を使用したパスを指定したときです。たとえば、“/A/B/C/text()”および“/A/D/E/C/text()”というパスに一致するノードが存在するXMLデータに対して“/A//C/text() = 100”という比較式を指定した場合です。
パスが複数のノードを指すかつ、比較演算子が“!=”でない場合は、パスと対応するノードのうち1つでも比較式の条件を満たすノードが存在した場合に比較式は真となります。比較演算子が“!=”の場合は、パスと対応するすべてのノードが比較式の条件を満たす場合に真となります。
注意
XMLデータ中に実体参照として記述された文字を検索するためには、リテラルにおいてもその文字を実体参照として記述します。
比較式の右辺のリテラルが数値型の場合、左辺のパスの最後に“*/text()”、“//text()”、“@*”は指定できません。
比較式の比較演算子が“<”、“<=”、“>”、“>=”の場合、左辺のパスの最後に“*/text()”、“//text()”、“@*”は指定できません。
比較式の左辺のパスには、フィルタを指定できません。