XMLドキュメント:
<Home>
<Addr>
<Street>ABC</Street>
<Number>5</Number>
<Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
</Addr>
</Home>
XPath式:
//*[contains(text(), 'ABC')]
//*
ルートノードの子孫要素に一致します。つまり、ルートノード以外のすべての要素です。
[...]
ある述語が、それは、ノードセットをフィルタリングします。そのためには、ノードを返す...
ですtrue
。
述語はノードセット[...]をフィルタリングして、新しいノードセットを生成します。フィルタリングするノードセットの各ノードについて、PredicateExprが評価されます[...]; PredicateExprがそのノードに対してtrueと評価された場合、ノードは新しいノードセットに含まれます。それ以外の場合は含まれません。
contains('haystack', 'needle')
次を含むtrue
場合haystack
に 返されますneedle
:
関数:boolean contains(string、string)
contains関数は、最初の引数文字列に2番目の引数文字列が含まれている場合はtrueを返し、それ以外の場合はfalseを返します。
ただしcontains()
、最初のパラメータとして文字列を取ります。そして、それは渡されたノードです。最初のパラメーターとして渡されたすべてのノードまたはノードセットが関数によって文字列に変換されることを処理するにはstring()
:
引数は、文字列関数を呼び出した場合と同様に文字列型に変換されます。
string()
関数リターンstring-value
の最初のノード。
ドキュメントセットの最初にあるノードセット内のノードの文字列値を返すことにより、ノードセットは文字列に変換されます。ノードセットが空の場合、空の文字列が返されます。
string-value
要素ノード。
要素ノードの文字列値は、要素ノードのすべてのテキストノードの子孫の文字列値をドキュメント順に連結したものです。
string-value
テキストノード:
テキストノードの文字列値は文字データです。
したがって、基本的にstring-value
はノードに含まれるすべてのテキストです(すべての子孫テキストノードの連結)。
text()
任意のテキストノードに一致するノードテストです。
ノードテストtext()は、どのテキストノードでもtrueです。たとえば、child :: text()は、コンテキストノードのテキストノードの子を選択します。
そうは言って//*[contains(text(), 'ABC')]
も、最初のテキストノードにが含まれてABC
いるすべての要素(ルートノードを除く)に一致します。以降text()
戻りコンテキストノード(式が評価された相対的)のすべての子テキストノードを含むノードセット。しかしcontains()
、最初のものだけを取ります。したがって、上記のドキュメントのパスはStreet
要素とます。
次の式//*[text()[contains(., 'ABC')]]
は、を含む少なくとも1つの子テキストノードを持つすべての要素(ルートノードを除く)に一致しますABC
。.
コンテキストノードを表します。この場合は、ルートノード以外の任意の要素の子テキストノードです。したがって、上記のドキュメントのパスはと一致しStreet
、Comment
要素にます。
次に、//*[contains(., 'ABC')]
(ABC
子孫テキストノードの連結に)を含むすべての要素(ルートノードを除く)を照合します。それ以上の文書が一致したためにHome
、Addr
、Street
、およびComment
要素を。このように、//*[contains(., 'BLAH ABC')]
一致Home
、Addr
およびComment
要素。
//*[contains(text(),'ABC')]
限り、<Street>
要素のみを返します。<Street>
またはの祖先を返しません<Comment>
。