2013-08-27 7 views
18

ich Nokogiri verwenden, um die HTML-Seite mit dem gleichen Inhalt analysieren:Wie bekomme ich Knotentext ohne Kinder?

<p class="parent"> 
    Useful text 
    <br> 
    <span class="child">Useless text</span> 
</p> 

Wenn ich die Methode page.css('p.parent').text 'Nützliche Text Useless Text' Nokogiri kehrt nennen. Aber ich brauche nur 'nützlichen Text'.

Wie bekomme ich Knotentext ohne Kinder?

Antwort

26

XPath enthält den text() Knotentest für die Auswahl Textknoten modifiziert werden, so dass Sie tun können:

page.xpath('//p[@class="parent"]/text()') 

XPath verwenden, um HTML-Klassen auswählen können ganz werden Schwierig, wenn das fragliche Element zu mehr als einer Klasse gehören könnte, also könnte dies nicht ideal sein.

Zum Glück Nokogiri fügt die text() Wähler auf CSS, so können Sie verwenden:

page.css('p.parent > text()') 

die Textknoten zu erhalten, die direkte Kinder von p.parent sind. Dadurch werden auch einige Knoten zurückgegeben, die nur whitespace sind. Daher müssen Sie sie möglicherweise ausfiltern.

+1

Der Text() - Selektor scheint die sauberste Lösung zu sein. Vielen Dank! –

0

Sie sollten page.css('p.parent').children.remove verwenden können.

Dann gibt Ihr page.css('p.parent').text den Text ohne die Kinderknoten zurück.

Hinweis: Die page wird von der remove