サンプルで覚えるXSLTプログラミング
6.出力系XSLTエレメント
出力系エレメントはXML文書を出力するときに使用するタグ群です。出力系のタグは非常に重要です。特に<xsl:value-of>や<xsl:attribute>は頻繁に使用されることが多いと思いますので、ぜひマスターしてください。
<xsl:output>はWML文書(WAPで使われるXML標準)など、ヘッダー部分を記述する際に使用します。<xsl:outpu>を使用したWAPの例(phone.com version 3.2ブラウザ対応)も紹介しますので、興味のある方の参考になれば幸いです。
該当する表現の値を代入
<xsl:value-of>
属性名 | 属性値 | 機能 |
select | XPath表現 | ここで指定された表現の内容が出力されます。必須です。 |
disable-output-escaping | yes/no | 特殊文字&などを&と表現するのが(no)がデフォルトになっています。これを(yes)とすることで文字はエスケープなしにそのまま表記されます。 |
例:<xsl:value-of select="name"/>
|
エレメントノードの生成
<xsl:element>
属性名 | 属性値 | 機能 |
name | 文字列 | エレメントノードの名前で必須です。 |
例:<xsl:element name="HTML">
|
属性ノードの生成
<xsl:attribute>
属性名 | 属性値 | 機能 |
name | 文字列 | 属性ノードの名前で必須です。 |
例:<xsl:attribute name="VALUE">
|
テキストノードの生成
<xsl:text>
属性名 | 属性値 | 機能 |
disable-output-escaping | "yes"/"no" | 特殊文字&などを&と表現する(no)がデフォルトになっています。これを(yes)とすることで文字はエスケープなしにそのまま表記されます。 |
例: |
コメントノードの生成
<xsl:comment>
属性はありません。
PI(processing-instruction)の生成
<xsl:processing-instruction>
属性名 | 属性値 | 機能 |
name | 文字列 | PIノードの名前で必須です。 |
PIとは<?xml version="1.0"?>のように<?と?>で挟まれた特殊なタグのことです。
出力方法の指定
<xsl:output>
属性名 | 属性値 | 機能 |
method | "html"/"text"/"xml"/文字列 | 出力のフォーマットを記入します。 |
encoding | 文字列 | 出力のエンーディングを指定します。 |
omit-xml-declaration | "yes"/"no" | <?xmlで始まるタグを省略するかどうかを指定します。 |
doctype-public | 文字列 | DOCTYPE宣言のpublic内容を指定します。 |
doctype-system | 文字列 | DOCTYPE宣言のsystem内容を指定します。 |
meida-type | 文字列 | MIMEタイプを指定します。 |
例: <xsl:output
method="html" encoding="Shift_JIS"/>
|
下記のスタイルシート「prefectures4.xsl」では、ここで紹介したタグ(<xsl:processing-instruction>および<xsl:output>を除いたもの)をすべて使用しています。これによって「出力3」が得られます。
prefectures4.xsl(変数系タグを使ったサンプル)<?xml version="1.0" encoding="Shift_JIS"?> <xsl:output
method="html" encoding="Shift_JIS"/> |
出力3(都道府県の一覧)
|
普通はエレメントノードを動的生成することはあまりないため、<xsl:element>で取り扱わず、“<OPTION>”のようにエレメントを直接スタイルシート内に記述していきます。<xsl:element>を使ってエレメントを動的生成する例として、下記のような例があります。
<xsl:element name="concat('H',
$size)"> |
ここでは、<H1>から<H6>のようなタグを、“$size”と“1”から“6”までに分割して、動的に結合することでタグを生成しています。concat関数は、2つ以上の任意の数の文字列を連結する関数です。
スタイルシートでWMLを生成してみる
さてこれまではHTML(XHTML)への変換のみを扱ってきました。読者の中にはXSLTが単なるHTMLへの変換言語だと思われている方がいるかもしれません。言い訳がましいようですが、HTMLへの変換を主にしているのはHTMLに変換することでXSLTの機能を理解していただくのが一番早い方法だと考えているからです。
そこで、ここではHTML以外への変換として、WMLへの変換例を紹介します。その前に、WMLの一般的なフォーマットを簡単に説明しておきましょう。
template.wml(WMLのフォーマット例)<?xml version="1.0" encoding="Shift_JIS"?> |
注意点は、2行目、3行目にある<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">というWMLタグを生成するのに、<xsl:output>タグを使用する点です。
では、スタイルシートの例を紹介しましょう。下記の「efectures5.xsl」は都道府県名のリストをWMLフォーマットで出力するするものです。
prefectures5.xsl(都道府県名利ストをWMLで出力)<?xml version="1.0" encoding="Shift_JIS"
?> |
上記のスタイルシートでは、フローコントロール系の<xsl:for-each>タグが使用されていますが、これについては次回説明します。ここでは“prefecture”というタグがあるたびに、<xsl:for-each>に挟まれた処理を実行するものだと考えてください。
WMLに興味のある方は、phone.comからWAP端末シミュレーターをダウンロードして使用してみると、実際に上記のWMLを表示させることができます。
例として示したファイルは下記からダウンロードできます。
Index | |
サンプルで覚えるXSLTプログラミング | |
1.
XMLからHTMLへの変換 スタイルシートはどのように解釈されるか |
|
2.
XPathの基礎知識 XML文書をツリー構造で見る XPathの表記方法 |
|
3. XSLTエレメントの概要 コラム XSLTプロセッサのインストール |
|
4. テンプレート系XSLTエレメント テンプレートの定義 該当するテンプレートの適用 指定されたテンプレートの呼び出し |
|
5. 変数系XSLTエレメント 変数の定義1 変数の定義2 |
|
6. 出力系XSLTエレメント 該当する表現の値を代入 エレメントノードの生成 属性ノードの生成 テキストノードの生成 コメントノードの生成 PI(processing-instruction)の生成 出力方法の指定 |
|
7. フローコントロール系XSLTエレメント ループ処理 条件分岐 IF文 |
|
8. その他のXSLTエレメント
他のXSLファイルの読み込み 数の割り当て |
|
9.XSLT関数の概要 関数の主な分類 |
|
10. 文字列系関数 文字列の連結 文字列の調査 数字のフォーマッティング 空白の除去 …… |
|
11. 数値計算系関数 切り上げ 表現の数を数える 切り下げ 数値型への変換 四捨五入 加算 |
|
12. ノードに関する関数 | |
13. bool代数系関数 | |
14. その他の関数 | |
15. JavaによるXSLTの拡張
Built-inクラスの呼び出し カスタムメイドの関数を作る |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|