Frage

Ich möchte Dinge wie Aufzählungszeichen hinzufügen „•“ in HTML die XML-Builder in Nokogiri verwenden, aber alles entgangen ist. Wie verhindere ich es aus entkommen werden?

Ich würde das Ergebnis gefällt werden:

<span>&#8226;</span> 

statt:

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

Ich bin gerade dabei folgendermaßen aus:

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

Was bin ich?

War es hilfreich?

Lösung

Wenn Sie definieren

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

dann dieses

  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

Ausbeuten

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

PS diese eine Abhilfe nur, für eine saubere Lösung für die libxml2 Dokumentation entnehmen Sie bitte (Nokogiri auf libxml2 gebaut) für weitere Hilfe. Aber auch diese Leute zugeben, dass Umgang mit Entitäten ganz ..err sein können, umständlich manchmal .

Andere Tipps

Wenn Sie den Text eines Elements sind einstellen, die Sie wirklich setzen Text, keine HTML-Quelle. < und & haben keine besondere Bedeutung im Klartext.

So geben Sie einfach eine Kugel: '•'. Natürlich wird Ihr Quellcode und Ihre XML-Datei haben die gleiche Codierung zu verwenden für dieses Recht zu kommen. Wenn Ihre XML-Datei UTF-8 ist aber Ihr Quellcode ist nicht, dann würden Sie wahrscheinlich '\xe2\x80\xa2' zu sagen haben, die die UTF-8-Byte-Sequenz für das Aufzählungszeichen als Stringliteral ist.

(Im Allgemeinen nicht-ASCII-Zeichen in Ruby 1.8 sind heikel. Die Byte-basierte Schnittstellen Netz nicht allzu gut mit XML der Welt von all-Text-is-Unicode).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top