2010-05-08 15 views
5

Voglio sostituire il testo_interno in tutti i paragrafi del mio documento XHTML.Nokogiri trova testo nei paragrafi

so di poter ottenere tutto il testo con Nokogiri come questo

doc.xpath("//text()") 

Ma io voglio solo operare sul testo in paragrafi, come posso selezionare tutto il testo in paragrafi senza incidere alla fine testi di ancoraggio esistenti in link?

#For example : <p>some text <a href="/">This should not be changed</a> another one</p> 
+0

se l'ultimo tag deve essere "

", per chiudere il tag '

' anziché ' '? – michaelmichael

+0

La selezione, in base a qualsiasi definizione, non dovrebbe _affect_ qualcosa. Cosa intendi per "selezionare senza influenzare"? –

+0

@michaelmichael - certo, hai ragione, ho corretto l'ultimo tag di chiusura – astropanic

risposta

5

Per il testo che è un figlio diretto di un paragrafo utilizzo // p/text()

irb> h = '<p>some text <a href="/">This should not be changed</a> another one</p>' 
=> ... 
irb> doc = Nokogiri::HTML(h) 
=> ... 
irb> doc.xpath '//p/text()' 
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">] 

Per il testo che è un discendente (immediata o meno) di un utilizzo paragrafo // p //testo(). Per escludere quei testi che hanno un'ancora come genitore, potresti semplicemente sottrarli.

irb> doc.xpath('//p//text()') - doc.xpath('//p//a/text()') 
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">] 

Probabilmente c'è un modo per farlo con una chiamata, ma la mia conoscenza di xpath non è così approfondita.

+0

Molto intelligente, carino, grazie – astropanic

Problemi correlati