XSLTを使用してXHTMLを出力する
- [XML, DOM]
HTMLを出力するサンプルは巷にあふれているんだけど、XHTMLとして出力する方法がなかなかわからなかったので、サンプルを作ってみました。ついでなんで、XHTMLにネームスペースのプリフィックスをつける例としてみました。
(もちろん、stylesheetのところで宣言しているXHTMLのプリフィックス":xhtml"を省略し、namespase-alias指定を削除すると、通常のXHTMLのようにかけます)
ポイント(というほどのことでもないけど)は、outputでmethod="xml"にすることでしょうか。
ただし、これを使用してMSXMLで変換をかけると、xml宣言がencoding="UTF-16"固定になってしまいます。形だけでも"Shift_JIS"で出てほしいものです。
(多分、COMコンポーネントなので、出力はユニコードだから、ってことなんだろう、と解釈)
<?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <!-- xhtmlネームスペースを通常の出力に --> <xsl:namespace-alias stylesheet-prefix="xhtml" result-prefix="#default"/> <!-- 出力方法を定義(DOCTYPEを出力させる) --> <xsl:output method="xml" encoding="Shift_JIS" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" indent="yes" media-type="text/html; charset=Shift_JIS"/> <!-- ルートノード --> <xsl:template match="/"> <xhtml:html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <xhtml:head> <xhtml:meta http-equiv="content-type" content="application/xhtml+xml; charset=Shift_JIS" /> <xhtml:meta http-equiv="content-script-type" content="text/javascript" /> <xhtml:meta http-equiv="content-style-type" content="text/css" /> <xhtml:link rel="stylesheet" href="./style.css" type="text/css" /> <xhtml:title>ドキュメントタイトル</xhtml:title> </xhtml:head> <xhtml:body> <!-- 下位テンプレートをロード --> <xsl:apply-templates /> </xhtml:body> </xhtml:html> </xsl:template> <!-- languagesノードのテンプレート --> <xsl:template match="languages"> <xhtml:table summary="言語一覧"> <xhtml:thead> <xhtml:tr> <xhtml:th abbr="言語">言語</xhtml:th> <xhtml:th abbr="言語の説明">説明</xhtml:th> </xhtml:tr> </xhtml:thead> <xhtml:tbody> <xsl:for-each select="language"> <xsl:sort select="@name" order="ascending" /> <xsl:apply-templates select="." /> </xsl:for-each> </xhtml:tbody> </xhtml:table> </xsl:template> <!-- 言語ごとのテンプレート --> <xsl:template match="language"> <xhtml:tr> <xhtml:th><xsl:value-of select="@name"/></xhtml:th> <xhtml:td><xsl:value-of select="description"/></xhtml:td> </xhtml:tr> </xsl:template> </xsl:stylesheet>
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/11
コメント