2013-08-27 1 views
18

Io uso Nokogiri per analizzare la pagina html con lo stesso contenuto:Come ottenere il testo del nodo senza figli?

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

Quando chiamo il metodo page.css('p.parent').text Nokogiri restituisce 'testo utile testo Inutile'. Ma ho bisogno solo di "testo utile".

Come ottenere il testo del nodo senza figli?

risposta

26

XPath include il test text() di nodo per la selezione di nodi di testo, in modo che si possa fare:

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

Utilizzando XPath per selezionare classi HTML può diventare molto difficile se l'elemento in questione potrebbe appartenere a più di una classe, quindi potrebbe non essere l'ideale.

Fortunatamente Nokogiri aggiunge il selettore text() a CSS, in modo da poter utilizzare:

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

per ottenere i nodi di testo che sono figli diretti di p.parent. Ciò restituirà anche alcuni nodi che sono solo whtespace, quindi potrebbe essere necessario filtrarli.

+1

Il selettore text() sembra essere la soluzione più pulita. Grazie! –

0

Dovresti essere in grado di utilizzare page.css('p.parent').children.remove.

Quindi il tuo page.css('p.parent').text restituirà il testo senza i nodi figli.

Nota: il page saranno modificati dal remove