3

我想使用 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=等方面通常让我印象深刻……有人知道具有类似功能的不那么自动魔术库吗?

非常感谢 ;)

4

1 回答 1

0

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

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

新文档具有类似title=meta_encoding=可用的 HTML 方法,并且在序列化时创建一个 HTML 文档而不是 HTML:添加 HTML 文档类型,正确使用空标签,如<br>,在适当的地方显示最小化的属性(例如<input type="checkbox" selected>),并且不会转义类似>in<script>块。

于 2014-01-11T17:53:55.007 回答