Ricerca…


Trova tutti gli elementi con un determinato testo

Immagina il seguente XML:

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

La seguente espressione XPath:

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

restituirà l' <element>hello</element> , ma non l'elemento <another> . Questo perché l'elemento <another> contiene spazi bianchi che circondano il testo hello .

Per recuperare sia <element> che <another> , si potrebbe usare:

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

o

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

che taglierà lo spazio circostante circostante prima di fare il confronto. Qui possiamo vedere che lo specificatore del nodo text() è opzionale quando si usa lo normalize-space .

Per trovare un elemento contenente testo specifico, puoi utilizzare la funzione contains . La seguente espressione restituirà l'elemento <example> :

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

Se vuoi trovare un testo che si estende su più bambini / nodi di testo, puoi utilizzarlo . invece di text() . . si riferisce all'intero contenuto testuale dell'elemento ed è figlio.

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

Per vedere i diversi nodi di testo, puoi usare:

//example//text()

che restituirà:

  • "Ciao, "
  • "Sono un esempio"
  • ""

E per vedere più chiaramente l'intero contenuto del testo di un elemento, si può usare la funzione string :

string(//example[1])

o semplicemente

string(//example)

Ciao, sono un esempio.

Quest'ultimo funziona perché, se un set di nodi viene passato in funzioni come string , XPath 1.0 guarda solo il primo nodo (nell'ordine del documento) in quel set di nodi e ignora il resto.

così:

string(/root/*)

ritornerebbe:

Ciao



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow