如何使用Nokogiri :: XML :: Builder将非转义的&符号添加到HTML中
题
我想添加诸如项目符号<!>“<!>#8226; <!>”;使用Nokogiri中的XML Builder使用HTML,但所有内容都被转义。如何防止它被转义?
我希望结果是:
<span>•</span>
而不是:
<span>&#8226;</span>
我只是这样做:
xml.span {
xml.text "•\ "
}
我错过了什么?
解决方案
如果你定义
class Nokogiri::XML::Builder
def entity(code)
doc = Nokogiri::XML("<?xml version='1.0'?><root>&##{code};</root>")
insert(doc.root.children.first)
end
end
然后这个
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
产量
<?xml version="1.0"?>
<span>I can has • entity?</span>
NBSP <!>;
PS 这只是一个解决方法,对于一个干净的解决方案,请参阅libxml2
文档(Nokogiri建立在libxml2上)以获得更多帮助。但是,即使这些人也承认处理实体可能非常简单,有时也很麻烦。
其他提示
当您设置元素的文本时,您确实在设置文本,而不是HTML源。 <
和&
在纯文本中没有任何特殊含义。
所以只需输入一个子弹:'•'
。当然,您的源代码和XML文件必须使用相同的编码才能正确显示。如果你的XML文件是UTF-8但你的源代码不是,你可能不得不说'\xe2\x80\xa2'
哪个是子弹字符的UTF-8字节序列作为字符串文字。
(一般情况下,Ruby 1.8中的非ASCII字符很棘手。基于字节的接口与XML的全文是Unicode的世界不太匹配。)
不隶属于 StackOverflow