XSLTでXHTMLをHTML4に変換してみる
2008年5月21日(水曜日)
XSLTでXHTMLをHTML4に変換してみる
プログラムでHTMLを出力したいのですが、出力結果をUTF-8のXHTMLではなく、Shift_JISのHTML4にしたいという……。
文字列連結でHTMLを作るのは避けたいと思っているので、DOM操作でなんとかしたいところですが、それだとSGMLであるところのHTML4を出力するのは何かと面倒です。
というわけで、XHTMLで吐いてからHTML4に変換できないかと画策。XSLTの output method="html" で行けるはず……と思い、<xsl:copy-of/> でさくっとコピーしてみたのですが、それだと名前空間がついてきてしまうのでダメでした。というわけでこんなテンプレートを作成。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="Shift_JIS" indent="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd" /> <xsl:template match="*"> <xsl:element name="{name()}"> <xsl:for-each select="@*"> <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute> </xsl:for-each> <xsl:apply-templates /> </xsl:element> </xsl:template> </xsl:stylesheet>
これで割とうまく行ったような気がしましたが、xml:langがついてきてしまったり、meta http-equiv がダブったり……。もう少し調整しないとダメですか。
- 「XSLTでXHTMLをHTML4に変換してみる」にコメントを書く
- 前(古い): 小さな王様 6周目クリア
- 次(新しい): とある改竄報告ページにあった脆弱性の話