1. ホーム
  2. xml

テキストを含む要素のみを返し、その親を返さないXPath

2023-08-21 08:35:18

質問

このxmlの中で、「match」を含む要素(random2要素)をマッチングさせたい。

<root>
 <random1>
  <random2>match</random2>
  <random3>nomatch</random3>
 </random1>
</root>

OK、今のところ私は

//[re:test(.,'match','i')] (with re in the proper namespace)

これは、random2、random1、rootを返します。random2だけを取得したいのですが。

何かいい方法はないでしょうか?

どのように解決するのですか?

を探すのですか? を含む を含む要素を探しますか? と同じ "match"ですか?

これは、'match'と等しいテキストノードを持つ要素を見つけます('match'は random2 ):

//*[text()='match']


これは、"match"と等しいテキストノードを持つすべての要素を、先頭と末尾の空白を取り除いた後で探します(matches random2 ):

//*[normalize-space(text())='match']


これは、テキストノードの値に 'match' を含むすべての要素を探します(matches random2random3 ):

//*[contains(text(),'match')]


これは XPATH 2.0 ソリューションでは matches() 関数と、'match' を含み文字列の先頭で始まるテキストノードを探す正規表現パターンを使います(例. ^ など)、あるいは単語境界(つまり \W )、文字列の終端(すなわち $ ) または単語境界で終了します。3番目のパラメータ i は大文字小文字を区別せずに 正規表現パターンを評価します。(マッチする random2 )

//*[matches(text(),'(^|\W)match($|\W)','i')]