1

似乎所有实体都被杀死了

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。挖掘代码没有给出任何提示;我必须设置哪些参数才能获得正确的结果?

4

1 回答 1

3

ooml 不是 XML 中的预定义实体。如果你想在 XHTML 中允许 HTML 实体引用,你需要使用一个解析器来读取文档类型中的外部 DTD。这是一个很大的努力;如果您有与 HTML 兼容的 XHTML 和实体引用,您可能更喜欢只使用 HTML 解析器。

于 2009-09-09T14:15:48.660 回答