2012-04-22 17 views
9

Ich habe schlechte XHTML Ich muss mit XPath analysieren. Es sieht so aus:XPath auf verschachtelten Elementen mit text(), aber keine Leerzeichen

<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> 

Ich möchte alle Inhalte mit "Ich brauche diesen Text" in der ersten Div auswählen. Mein Problem ist, dass die div-Elemente Leerzeichen oder andere Dinge enthalten, so dass // div [@ class = "foo"]/text() auch leere Zeichenfolgen für das zweite div zurückgibt. Ich möchte diese leeren Felder ignorieren, wie kann ich das tun?

+0

Hat [() = "" normalisieren-Raum!] Am Ende der Anfrage Hilfe etwas wie das Hinzufügen tun? – Steve

Antwort

13

Verwenden:

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

Dies wählt jede nicht-Leerzeichen-only Textnode Abkömmling irgendeine div in dem Dokument, das (die div) ein Text-Knoten-Abkömmling, das normierte Zeichenfolgenwert ist Zeichenfolge "i need this text".

Die normalize-space() Funktion nimmt einen String (der String-Wert des Kontextes node - Wenn kein Argument angegeben wird) und erzeugt daraus eine weitere Zeichenkette in der alle vorderen und hinteren Leerzeichen gelöscht werden, und eine beliebige innere Gruppe von benachbarte Leerzeichen werden durch ein einzelnes Leerzeichen ersetzt.

-1

diesen Selektor Versuchen:

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

+0

Bitte fügen Sie etwas Text hinzu. –