2011-01-18 20 views
28

Noté algo extraño al usar Nokogiri recientemente. Todo el HTML que había estado analizando había recibido etiquetas de inicio y fin <html> y <body>.Cómo evitar que Nokogiri agregue etiquetas <DOCTYPE>?

<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n 

¿Cómo puedo evitar que Nokogiri haga esto?

IE, cuando lo haga:

doc = Nokogiri::HTML("<div>some content</div>") 
doc.to_s 

o:

doc.to_html 

consigo el original:

<html blah><body>div>some content</div></body></html> 
+0

la versión de Nokogiri? – shingara

+0

nokogiri (1.4.3.1) – holden

Respuesta

3

El método to_s en un Nokogiri::HTML::Document da salida a una página HTML válido, completo con sus elementos requeridos. Esto no es necesariamente lo que se pasó al analizador.

Si desea generar un resultado inferior a un documento completo, utilice métodos como inner_html, inner_text, etc., en un nodo.

Editar: si no está esperando analizar un documento XML completo y bien formado como entrada, entonces la respuesta de TheMan es la mejor.

77

El problema ocurre porque está utilizando el método incorrecto en Nokogiri para analizar su contenido.

require 'nokogiri' 

doc = Nokogiri::HTML('<p>foobar</p>') 
puts doc.to_html 
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
# >> <html><body><p>foobar</p></body></html> 

En lugar de utilizar HTML que se traduce en un documento completo, utilice HTML.fragment, que dice Nokogiri sólo desea que el fragmento analizado:

doc = Nokogiri::HTML.fragment('<p>foobar</p>') 
puts doc.to_html 
# >> <p>foobar</p> 
+1

Esta es la respuesta correcta. Haga caso omiso de la respuesta a continuación. ¿Puedes seleccionar tu propia respuesta como la respuesta correcta? Eso es simplemente extraño. – rainkinz

+0

Solo para el registro, la respuesta a la cual se refiere rainkinz que debe descartarse ha sido eliminada :) –

+0

Gracias hombre! Esta es la respuesta correcta. –

Cuestiones relacionadas