Szukaj…


Znajdź wszystkie elementy z określonym tekstem

Wyobraź sobie następujący kod XML:

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

Następujące wyrażenie XPath:

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

zwróci <element>hello</element> , ale nie element <another> . Wynika to z faktu, że element <another> zawiera białe znaki otaczające tekst hello .

Aby pobrać zarówno <element> i <another> , można użyć:

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

lub

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

co spowoduje przycięcie otaczających białych znaków przed wykonaniem porównania. Tutaj widzimy, że specyfikator węzła text() jest opcjonalny, gdy używa się normalize-space .

Aby znaleźć element zawierający określony tekst, możesz użyć funkcji contains . Poniższe wyrażenie zwróci element <example> :

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

Jeśli chcesz znaleźć tekst obejmujący wiele potomków / węzłów tekstowych, możesz użyć . zamiast text() . . odnosi się do całej zawartości tekstu elementu i jego dzieci.

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

Aby wyświetlić wiele węzłów tekstowych, możesz użyć:

//example//text()

który zwróci:

  • "Witaj, "
  • „Jestem przykładem”
  • „.”

Aby wyraźniej zobaczyć całą zawartość tekstu elementu, można użyć funkcji string :

string(//example[1])

Lub tylko

string(//example)

Cześć, jestem przykładem.

Ten ostatni działa, ponieważ jeśli zestaw węzłów zostanie przekazany do funkcji takich jak string , XPath 1.0 po prostu spojrzy na pierwszy węzeł (w kolejności dokumentów) w tym zestawie węzłów i zignoruje resztę.

więc:

string(/root/*)

wróciłby:

Witaj



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow