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に変換してみる」にコメントを書く
- 前(古い): 2008年5月17日(Saturday)のえび日記
- 次(新しい): 2008年5月23日(Friday)のえび日記
