我想使用 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=
等方面通常让我不知所措......有谁知道具有类似功能的不太自动魔法库?
非常感谢;)
>HTML::Document
扩展XML::Document
,但HTML文档中的各个节点只是普通XML::Nodes
,即没有任何HTML::Nodes
。这建议了一种将 XML 文档转换为 HTML 的方法,方法是创建一个新的空HTML::Document
并将其root
设置为 XML 文档的空:
html = Nokogiri::HTML::Document.new
html.root= transformed.root
新文档具有可用的 HTML 方法,如 title=
和 meta_encoding=
,并且在序列化时创建一个 HTML 文档而不是 HTML:添加一个 HTML 文档类型,正确使用空标签(如 <br>
(,在适当的地方显示最小化的属性(例如 <input type="checkbox" selected>
(,并且不会逃脱诸如>
<script>
块之类的东西。