2012-04-22 48 views
9

Tengo XHTML deficiente que necesito analizar con xpath. Se ve así:XPath en elementos anidados con texto() pero sin espacio en blanco

<div class="foo"> 
    i need this text 
    <br/> 
    <br/> 
    <span>sometext</span> 
</div> 

<div class="foo"> 
    <span>some other text</span> 
    <span>sometext</span> 
</div> 

Quiero seleccionar TODO el contenido con "necesito este texto" en el primer div. Mi problema es que los elementos div contienen espacios en blanco u otras cosas, por lo que // div [@ class = "foo"]/text() devuelve cadenas vacías para el segundo div también. Quiero ignorar estos campos vacíos, ¿cómo puedo hacer eso?

+0

¿Se hace algo como la adición de [normalizar el espacio() = ""!] Al final de su ayuda consulta? – Steve

Respuesta

13

Uso:

//div 
    [.//text() 
     [normalize-space() = 'i need this text'] 
    ] 
    //text()[normalize-space()] 

Esto selecciona cualquier de sólo no está en blanco descendiente nodo de texto de cualquier div en el documento, que (la div) tiene un descendiente texto-nodo cuyo valor de cadena normalizado es la cadena "i need this text".

La función normalize-space() toma una cadena (el valor de cadena del nodo de contexto - si no se especifica ningún argumento) y produce a partir de otra cadena en la que se borran todos los caracteres de espacio en blanco anterior y posterior, y cualquier grupo interno de los espacios en blanco adyacentes se reemplazan por un solo espacio.

-1

probar este selector:

//span[@class='glyphicon glyphicon-list mr5']/..[contains(normalize-space(text()),'Applications')]

+0

Por favor, agrega un texto. –

Cuestiones relacionadas