我想使用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=
等问题感到不满......有没有人知道一个具有类似功能的自动魔术库?
非常感谢;)
答案 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>
块中转义>
之类的内容。