Pregunta

Me gustaría agregar cosas como viñetas "•" a HTML usando XML Builder en Nokogiri, pero todo se escapa.¿Cómo evito que se escape?

Me gustaría que el resultado fuera:

<span>&#8226;</span> 

en vez de:

<span>&amp;#8226;</span> 

Sólo estoy haciendo esto:

xml.span { 
  xml.text "&#8226;\ " 
}

¿Qué me estoy perdiendo?

¿Fue útil?

Solución

Si define

  class Nokogiri::XML::Builder
    def entity(code)
      doc = Nokogiri::XML("<?xml version='1.0'?><root>&##{code};</root>")
      insert(doc.root.children.first)
    end
  end

entonces esto

  builder = Nokogiri::XML::Builder.new do |xml|
    xml.span {
      xml.text "I can has "
      xml.entity 8665
      xml.text " entity?"
    }
  end
  puts builder.to_xml

rendimientos

<?xml version="1.0"?>
<span>I can has &#x2022; entity?</span>

& nbsp;

PS esta es solo una solución, para una solución limpia, consulte la documentación de libxml2 (Nokogiri está construido en libxml2) para obtener más ayuda. Sin embargo, incluso estas personas admiten que manejar entidades puede ser bastante ...err, a veces engorroso .

Otros consejos

Cuando configuras el texto de un elemento, en realidad estás configurando texto, no fuente HTML. < y & no tiene ningún significado especial en texto plano.

Así que simplemente escribe una viñeta: '•'.Por supuesto, su código fuente y su archivo XML tendrán que usar la misma codificación para que salga bien.Si su archivo XML es UTF-8 pero su código fuente no lo es, probablemente tendrá que decir '\xe2\x80\xa2' que es la secuencia de bytes UTF-8 para el carácter de viñeta como literal de cadena.

(En general, los caracteres que no son ASCII en Ruby 1.8 son complicados.Las interfaces basadas en bytes no encajan muy bien con el mundo XML de todo texto es Unicode.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top