使用Nokogiri :: XML.fragment的HTML实体问题

时间:2009-09-09 13:52:47

标签: ruby nokogiri libxml2

似乎所有实体都是使用

杀死的
tags = "<p>test umlauts &ouml;</p>"
Nokogiri::XML.fragment(tags)

结果:

<p>test umlauts </p>

上述方法调用Nokogiri::XML::DocumentFragment.parse(tags)并调用方法 Nokogiri::XML::DocumentFragment.new(XML::Document.new, tags)

关于nokogiri文档,将执行此代码:

def initialize document, tags=nil
    if tags
      parser = if self.kind_of?(Nokogiri::HTML::DocumentFragment)
                 HTML::SAX::Parser.new(FragmentHandler.new(self, tags))
               else
                 XML::SAX::Parser.new(FragmentHandler.new(self, tags))
               end
      parser.parse(tags)
    end
end

我认为我们正在处理XML :: SAX :: Parser和相应的FragmentHandler。挖掘代码并没有提示;我必须设置哪些参数才能获得正确的结果?

1 个答案:

答案 0 :(得分:3)

oouml不是XML中的预定义实体。如果要在XHTML中允许HTML实体引用,则需要使用在doctype中读取外部DTD的解析器。这是很多努力;如果你有与实体引用的HTML兼容的XHTML,你可能更喜欢使用HTML解析器。