水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2008年のえび日記 > 2008年5月 > 2008年5月21日(水曜日)

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 がダブったり……。もう少し調整しないとダメですか。

関連する話題: XML / HTML / XSLT

最近の日記

関わった本など