2010-05-08 5 views
5

Quiero reemplazar el inner_text en todos los párrafos en mi documento XHTML.Nokogiri encuentra texto en los párrafos

Sé que puedo conseguir todo el texto con Nokogiri como esto

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

Pero quiero que sólo operan en el texto en párrafos, cómo puedo seleccionar todo el texto en párrafos sin afectar eventualmente textos de anclaje existentes en los enlaces?

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

¿debería esa última etiqueta ser '

', para cerrar la etiqueta '

', en lugar de ''? – michaelmichael

+0

Seleccionar, por cualquier definición, no debe afectar a nada. ¿A qué te refieres con "seleccionar sin afectar"? –

+0

@michaelmichael - seguro, tienes razón, he corregido la última etiqueta de cierre – astropanic

Respuesta

5

Para el texto que es un niño inmediata de un uso párrafo // p/texto()

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

Para el texto que es un descendiente (inmediata o no) de un uso párrafo // p //texto(). Para excluir esos textos que tienen un anclaje como padre, puedes restarlos.

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

es probable que haya una manera de hacerlo con una sola llamada, pero mi conocimiento XPath no llega tan profundo.

+0

muy inteligente, agradable, gracias yoy – astropanic

Cuestiones relacionadas