ホーム > X-Plus > XML Square >  デベロッパーズコーナー  >  実践!XSLT

この記事を送る はてなブックマークに追加する BuzzurlにブックマークBuzzurlにブックマーク Yahoo!ブックマークに登録
テキストリンクコードを取得する

デベロッパーズコーナー:実践!XSLT(4)

2001年08月09日作成 

実践XSLT 「やさしいXSLTの書き方」
第4回:XSLTを実際に書いてみる-その2
   

(株)日本ユニテック
青木 秀起

1.イントロダクション

いよいよ「やさしいXSLTの書き方」も最終回となりました。今回は先回に引き続きプログラミング的な要素(一覧表参照)と、ノードを生成するための要素をご紹介します。顧客管理情報を例にとって実際に書いてみましょう!まず、顧客情報ファイルとそれを一覧表示するXSLファイルを同じディレクトリにダウンロードし(このファイルはZIP形式で圧縮されています)、IEで表示してください。うまく表示できたら、以下の学習に進んでください。


2.条件付き処理(xsl:if、xsl:choose、xsl:when、xsl:otherwise)

 
① 条件が単一の場合(xsl:if)

<xsl:if test="price&lt;1000">
・・・・・・
</xsl:if>
図1 xsl:ifの書き方

図1のように、xsl:ifは、"test"の値が真(true)のときに、処理を実行します。この例では、商品の価格が1000円より小さい場合に処理を実行します。

 
② 実際にxsl:ifを書いてみよう!

xsl:ifを使って、「建設業の会社だけを表示する」ようXSLファイルを修正してください。次の文を、<xsl:for-each select="company" >の下に挿入します。

<xsl:if test="type[@type-num='2']" >
・・・・・・
</xsl:if>
図2 建設業の会社を指定するxsl:ifの書き方

図2では、type要素のtype-num属性の値が2(建設業)である場合に処理を実行(表を作成)します。修正したらXSLファイルを保存し、サンプル・ファイルをIEで表示して建設業の会社だけが表示されているかを確認してください(うまく表示されない場合、正しいXSLファイルをダウンロードして比較してください)。


 
③ 複数の条件から選択する場合(xsl:choose、xsl:when、xsl:otherwise)

図3 複数の条件から選択する場合の書き方

図3のように、xsl:chooseは単独では用いられず、xsl:when(必須)とxsl:otherwise(なくても良い)がその子要素となります。xsl:whenは、"test"の値が真(true)のときに処理を実行します。すべてのxsl:when条件を満たさない場合にxsl:otherwiseの処理が実行されます。xsl:otherwiseが記述されていないときには何も生成されません。

 
④ 実際にxsl:choose、xsl:when、xsl:otherwiseを書いてみよう!

xsl:choose、xsl:when、xsl:otherwiseを使って、次の条件を満たすようXSLファイルを修正してください。
(1)従業員数が1000人以上の企業については、「会社名」、「本社所在地」、「電話番号」、「メール・アドレス」、「担当者」、「従業員数」、「業種」、「備考」のすべてを表示します。
(2)それ以外の企業については、「会社名」と「本社所在地」のみを表示します。
(3)従業員数(scale)をソートキーとして降順に並べ替えます。

次のようにXSLファイルを修正してください。

図4 xsl:choose、xsl:when、xsl:otherwiseの実際の書き方

並べ替えについては、第3回で学習したxsl:sortを使います。XSLファイルを保存し、サンプル・ファイルをIEで表示して、建設業の会社だけが表示されているかを確認してください(うまく表示されない場合、正しいXSLファイルをダウンロードして比較してください)。



3.ノードを生成する出力系要素

次にノードを生成する出力系の要素を考えてみましょう。以下の6つを取り上げてみます。一覧表もご覧ください。

 
① xsl:attribute(属性の生成)

<product>
  <xsl:attribute name="prod-id" >
    <xsl:value-of select="id">
  </xsl:attribute>
  <xsl:value-of select="proname">
</product>
<product>
<id>SD-2546-3S</id>
<proname>事務用デスクS型</proname>
</product>
図5 xsl:attributeの書き方 図6 ソース文書
<product prod-id="SD-2546-3S">
事務用デスクS型
</product>
図7 図6の変換結果

図7のようにproduct要素にprod-idという名前の属性が追加され、その属性値としてid要素の内容が入れられます。xsl:attributeは、name属性(必須)に指定した名前の属性を追加します。

 
② xsl:comment(コメントの生成)

<xsl:comment>
この製品は7月1日で製造中止になります。
</xsl:comment>

図8 xsl:commentの書き方


<!-- この製品は7月1日で製造中止になります。-->
図9 図8による変換結果

図9のように変換されます。xsl:commentの要素内容部分がコメントにされます。

 
③ xsl:element(要素の生成)

<xsl:template match="header">
  <xsl:element name="h1" >
    <xsl:value-of select="header">
  </xsl:element>

<header>
顧客管理リスト
</header>

図10 xsl:elementの書き方 図11 ソース文書
<h1>顧客管理リスト</h1>
図12 図11の変換結果

xsl:elementは、name属性(必須)に指定した名前の要素を生成します。図12のように変換されます。

 
④ xsl:processing-instruction(処理命令の生成)

<xsl:processing-instruction name="product-list" >
  src="prod200108.xml"
</xsl:processing-instruction>

図13 xsl:processing-instructionの書き方


<?product-list src="prod200108.xml"?>
図14 図13による変換結果

xsl:processing-instructionは、name属性(必須)に指定した名前の処理命令を、図14のように生成します。

 
⑤ xsl:text(テキストの生成)

<xsl:text>
弊社ホームページに引合いあり
</xsl:text>

図15 xsl:textの書き方


弊社ホームページに引合いあり
図16 図15による変換結果

xsl:text要素の内容をそのままテキストとして生成します。

 
⑥ xsl:value-of(指定したノードをテキストとして生成)

<prod-num>
<xsl:value-of select="@num" />
</prod-num>

<product num="SD-2378-KS">
ERPパッケージWiz2001(Windows版)
</product>
図17 xsl:value-ofの書き方 図18 ソース文書
<prod-num>
SD-2378-KS
</prod-num>
図19 図18の変換結果

sl:value-ofは、select属性に指定された属性値の文字列をテキストとして生成します。この例では、product要素のnum属性の属性値をprod-num要素の内容にしています。


4.まとめ

このように、XSLTの変換機能を駆使すれば、XMLを自由に加工し、HTMLに変換することができます。出力を意識せずにXMLとしてデータを管理することができます。4回にわたりXSLTの機能やメリットを概説してきました。粗筆でしたが皆様のご愛読に感謝致します。



 
フロー制御系要素一覧

要素
属性
説明
xsl:for-each select(必須) 繰り返し処理を行う
xsl:sort select(ソートキーの指定)、lang(ソートキーの言語の指定)data-type(ソートキーのデータ型の指定)order(昇順か降順かの指定)case-order(大文字小文字の優先の指定) ノードの並べ替えを行う
xsl:if test(必須) 条件が真(true)の時に処理を行う
xsl:choose   複数の選択肢から処理を選択する
xsl:when test(必須) 条件が真(true)の時に処理を行う
xsl:otherwise   xsl:when要素が全て偽(false)の時に処理を行う


 
出力系要素一覧

要素
属性
説明
<xsl:attribute> name(必須、追加する属性の名前)
namespace(適用されるURI)
属性を生成
<xsl:comment>   コメントの生成
<xsl:element> name(必須、生成する要素の名前)
namespace(適用されるURI)
use-attribute-sets(属性の集合を定義)
要素の生成
<xsl:processing-instruction> name(必須、生成する処理命令の名前) 処理命令の生成
<xsl:text> disable-output-escaping(エスケープ処理をするか否か(yes|no) テキストの生成
<xsl:value-of> select(必須)
disable-output-escaping(エスケープ処理をするか否か(yes|no)
指定したノードをテキストとして生成

>>次の記事「DOMを使うと何が変わるか?」




関連サービス

IT技術およびIT製品の可用性調査・検証業務





ページトップへ戻る