7. 出力とスタイルシートの結合
XSLT 7章 出力とスタイルシートの結合
- 7.1 出力
- 7.2 スタイルシートのインクルード
- 7.3 スタイルシートのインポート
- 7.4 スタイルシートの埋め込み
この章においては、以下の XML 文書を用いて変数とパラメータについてみていきたいと思います。
people.xml |
<?xml version="1.0"?> <people> <person>Kevin Shields</person> <person>Trent Reznor</person> </people> |
7.1 出力
<xsl:output method = "xml" | "html" | "text" | qname-but-not-ncname version = nmtoken encoding = string omit-xml-declaration = "yes" | "no" standalone = "yes" | "no" doctype-public = string doctype-system = string cdata-section-elements = qnames indent = "yes" | "no" media-type = string />
トップレベル要素 xsl:output を使用することにより、結果ツリーの出力方法を指定することができます。xsl:output 要素は、結果ツリーを生成することはありません。また、属性はすべて任意指定となります。
属性 | 内容 | 値 |
---|---|---|
method | 出力される文書の形式を指定する。 | xml, html, text |
version | 出力メソッドのバージョンを指定する。 | |
indent | XSLT プロセッサによる結果ツリーの出力時に、空白を追加するかどうかを指定する。 | yes または no |
encoding | キャラクタエンコーディングを指定する。 | [IANA] または [RFC2278] に登録されている charset 名または X- で始まるもの |
media-type | 結果ツリーの出力結果データのメディア型 (MIME コンテントタイプ) を指定する。 | |
doctype-system | ドキュメント型宣言で使用されるシステム識別子を指定する。 | |
doctype-public | ドキュメント型宣言で使用される公開識別子を指定する。 | |
omit-xml-declaration | XSLT プロセッサに XML 宣言を出力させるべきかどうかを指定する。 | yes または no |
standalone | XSLT プロセッサにスタンドアロンドキュメント宣言を出力すべきかどうかを指定する。 | yes または no |
cdata-section-elements | テキストノードである子を CDATA セクションに入れて出力すべき要素の名前のリストを指定する。 |
2.3 テンプレートルールの適用でも少しふれましたが、method 属性のデフォルトは結果ツリーの内容によって異なります。
- 結果ツリーのルートノードが子要素を持つ
- 結果ツリーのルートノードが持つ 1つ目の子要素 (つまりルート要素)が、null の名前空間 URI を持つ html 要素である。
- ルート要素より前に現れるすべてのテキストノードは、空白文字だけからなる
以上の条件を満たすと、デフォルトの出力メソッドは html となり、それ以外の場合は xml となります。出力メソッドが xml の場合は XML 宣言が出力されますが、html の場合は html タグが出力されるわけではありませんので、記述する必要があります。また、出力メソッドが html のとき、 encoding 属性が指定されていて、かつ、結果ツリーに head 要素がある場合、head 要素の開始タグ直後に meta 要素が追加され、キャラクタエンコーディングが指定されます。
<xsl:output method="html" indent="yes" encoding="EUC-JP" media-type="text/html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/> <xsl:template match="/"> <html> <head><title>html method</title></head> <xsl:apply-templates select="people/person"/> </html> </xsl:template> <xsl:template match="people/person"> <p><xsl:value-of select="."/></p> </xsl:template>
上記のテンプレートを people.xml に適用すると以下の出力を得られます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>html method</title> </head> <p>Kevin Shields</p> <p>Trent Reznor</p> </html>