将Nokogiri :: XML :: Document转换为Nokogiri :: HTML :: Document

时间:2013-03-02 05:47:57

标签: ruby casting xml-serialization html-parsing nokogiri

我想使用XSL将XML文档转换为HTML,稍微修改一下,然后将其渲染出来。这基本上就是我在做的事情:

source = Nokogiri::XML(File.read 'source.xml')
xsl = Nokogiri::XSLT(File.read 'transform.xsl')
transformed = xsl.transform(source)
html = Nokogiri::HTML(transformed.to_html)
html.title = 'Something computed'

Stylesheet::transform始终返回XML::Document,但我需要HTML::Document个实例才能使用title=等方法。

上面的代码有效,但导出和重新解析为HTML非常糟糕。由于目标是源的子类,因此必须有更有效的方法来执行转换。

我该如何清理这个烂摊子?

作为一个附带问题,Nokogiri通常对我处理文档类型,不了解<meta charset=等问题感到不满......有没有人知道一个具有类似功能的自动魔术库?

非常感谢;)

1 个答案:

答案 0 :(得分:0)

HTML::Document扩展了XML::Document,但HTML文档中的各个节点只是普通XML::Nodes,即没有任何HTML::Nodes。这提示了一种通过创建新的空HTML::Document并将其root设置为XML文档的方式将XML文档转换为HTML的方法:

html = Nokogiri::HTML::Document.new
html.root= transformed.root

新文档包含title=meta_encoding=等HTML方法,在序列化时会创建HTML文档而非HTML:添加HTML文档类型,正确使用{{1}等空标记},在适当的位置显示最小化的属性(例如<br>),并且不会在<input type="checkbox" selected>块中转义>之类的内容。