2012-04-22 60 views
9

Mam słabego XHTML Potrzebuję parsować z xpath. Wygląda to tak:XPath na zagnieżdżonych elementach z tekstem() ale bez białych znaków

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

Chcę wybrać WSZYSTKĄ zawartość z "potrzebuję tego tekstu" w pierwszym dziale. Mój problem polega na tym, że elementy div zawierają spacje lub inne rzeczy, tak że // div [@ class = "foo"]/text() zwraca również puste ciągi dla drugiego elementu div. Chcę zignorować te puste pola, jak mogę to zrobić?

+0

Czy robi coś podobnego, dodając [normalizować-przestrzeń() = ""!] Na końcu waszej pomocy zapytań? – Steve

Odpowiedz

13

Zastosowanie:

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

to wybranie dowolnego węzła tekst bez spacji, tylko potomka dowolnym div w dokumencie, że (the div) ma potomka tekstu węzła którego znormalizowana wartość ciągu jest ciąg "i need this text".

normalize-space() funkcja przyjmuje ciąg znaków (wartość ciągu węzła kontekstowego - jeśli żaden argument nie jest określony) i tworzy z nim inny ciąg, w którym wszystkie wiodące i końcowe znaki spacje są usuwane, a każdą wewnętrzną grupę sąsiednie znaki odstępu zastępowane są pojedynczym odstępem.

-1

Spróbuj tego selektora:

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

+0

Dodaj tekst. –

Powiązane problemy