Wie nicht entgangen Et-Zeichen in HTML mit Nokogiri :: XML :: Builder hinzufügen
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>•</span>
statt:
<span>&#8226;</span>
Ich bin gerade dabei folgendermaßen aus:
xml.span {
xml.text "•\ "
}
Was bin ich?
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 • 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).