Buscar..


Encuentra todos los elementos con cierto texto.

Imagina el siguiente XML:

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

La siguiente expresión XPath:

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

devolverá el <element>hello</element> , pero no el elemento <another> . Esto se debe a que el elemento <another> contiene espacios en blanco que rodean el texto de hello .

Para recuperar tanto el <element> como el <another> , uno podría usar:

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

o

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

que recortará el espacio en blanco circundante antes de hacer la comparación. Aquí podemos ver que el especificador de nodo text() es opcional cuando se utiliza normalize-space .

Para encontrar un elemento que contiene un texto específico, puede utilizar la contains la función. La siguiente expresión devolverá el elemento <example> :

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

Si desea buscar texto que abarque varios nodos hijos / texto, puede usarlo . en lugar de text() . . Se refiere a todo el contenido del texto del elemento y sus hijos.

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

Para ver los múltiples nodos de texto, puede utilizar:

//example//text()

que volverá:

  • "Hola, "
  • "Yo soy un ejemplo"
  • "."

Y para ver más claramente el contenido de texto completo de un elemento, se puede usar la función de string :

string(//example[1])

o solo

string(//example)

Hola soy un ejemplo

El último funciona porque, si un conjunto de nodos se pasa a funciones como una string , XPath 1.0 solo mira el primer nodo (en el orden del documento) en ese conjunto de nodos, e ignora el resto.

asi que:

string(/root/*)

volvería:

Hola



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow