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::Documenttitle=

上記のコードは機能しますが、HTML としてのエクスポートと再解析はひどいものです。ターゲットはソースのサブクラスであるため、変換を実行するためのより効果的な方法が必要です。

どうすればこの混乱をきれいにできますか?

余談ですが、Nokogiri は一般的に、doctypes の処理、認識の欠如<meta charset=などで私を圧倒してきました...似たような機能を備えた自動魔法の少ないライブラリを知っている人はいますか?

どうもありがとう ;)

4

1 に答える 1

0

HTML::DocumentextendsXML::Documentですが、HTML 文書内の個々のノードは単純です。XML::Nodesつまり、何もありませんHTML::NodesHTML::Documentこれは、新しい空を作成し、それを XML ドキュメントのものに設定することによって、XML ドキュメントを HTML に変換する方法を示唆してrootいます。

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

新しいドキュメントにはtitle=とのような HTML メソッドがmeta_encoding=あり、シリアル化すると HTML ではなく HTML ドキュメントが作成されます: HTML Doctype を追加し、 のような空のタグを正しく使用し<br>、必要に応じて最小化された属性を表示し (例: <input type="checkbox" selected>)、次のようなものをエスケープしません><script>ブロック。

于 2014-01-11T17:53:55.007 に答える