サーチ…


特定のテキストを含むすべての要素を検索する

次のXMLを想像してみてください。

<root>
    <element>hello</element>
    <another>
        hello
    </another>
    <example>Hello, <nested> I am an example </nested>.</example>
</root>

次のXPath式は次のとおりです。

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

<element>hello</element>要素を返しますが、 <another>要素は返しません。これは、 <another>要素にhelloテキストを囲む空白が含まれているためです。

<element><another>両方を取得するには、 <element>使用できます。

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

または

//*[normalize-space() = 'hello']

これは比較を行う前に周囲の空白をトリムします。ここでは、 normalize-spaceを使用しているときにtext()ノード指定子がオプションであることがわかりtext()

特定のテキストを含む要素を検索するには、 contains関数を使用しcontains 。次の式は<example>要素を返します。

//example[contains(text(), 'Hello')]

複数の子/テキストノードにまたがるテキストを検索する場合は、使用できます. text()代わりに。 .要素のテキストコンテンツ全体とその子要素を指します。

//example[. = 'Hello,  I am an example .']

複数のテキストノードを表示するには、次のコマンドを使用します。

//example//text()

それは返すでしょう:

  • "こんにちは、 "
  • "私は例です"
  • ""

また、要素のテキストコンテンツ全体をより明確に見るために、関数stringを使用することができます:

string(//example[1])

あるいは単に

string(//example)

こんにちは、私は例です。

後者は、ノードセットがstringような関数に渡された場合、XPath 1.0はそのノードセット内の最初のノードを(ドキュメント順で)見て残りを無視するため、後者は機能します。

そう:

string(/root/*)

返すだろう:

こんにちは



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow