since 2004/05

第8回 XSLの便利機能その3

さらに続き、XSL便利機能を。
今回は「複数のXMLファイルを参照する」です。

この機能は、複数のXMLファイルから必要なデータを取り出せるので、
非常に便利です。

ではまず、使用するXMLデータから。
さすがに今までのを使いまわすわけに行かなくなったので、
新たに作成したデータです。
まずメインとなるXMLデータから。
今回はCDコレクション風になっています。

<?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="sample11.xsl"?> <menu> <title>Menu</title> <exp>フュージョンってかCASIOPEAばっかり</exp> <cd_sub data="cd01.xml" /> <cd_sub data="cd02.xml" /> <cd_sub data="cd03.xml" /> </menu>

この中で、今までに無い使い方をしているのが、「cd_sub」の中にある 「data」です。これは、「cd_sub」に対するパラメータという意味になります。 この「data」は、参照するCDデータのアドレスとして使います。 まずはこれをsample11.xmlとします。 次に各CDデータとなるXMLです。

<?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="sample12.xsl"?> <cd> <cddata> <title>THUNDER LIVE</title> <artist>CASIOPEA</artist> <date>1980</date> <data> CASIOPEA始めてのライブアルバム。 今のCASIOPEAには無い、荒々しさがたっぷりです。 だからといって、まとまりが無いわけではなく、非 常に勢いがあっていい感じ。 </data> </cddata> </cd>

えー、データの内容等は、管理人の趣味なので気にしない方向で。 このデータをcd01.xmlとします。 そして、これのデータ内容が違うものをcd02.xml,cd03.xmlとします。 あ、それとこの中でXSL(sample12.xsl)を指定していますが、今回は使用しないので、 これも気にしないでください。 では。 これら4つのXMLを纏めるXSLの説明を。 まずXSLから。

01:<?xml version="1.0" encoding="Shift_JIS"?> 02:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 03:<xsl:output method="html" encoding="Shift_JIS" /> 04:<xsl:template match="/"> 05: <html> 06: <head> 07: <style type="text/css" media="screen"> 08: @import url(style.css); 09: </style> 10: <title> 11: <xsl:value-of select="diary/title" /> 12: </title> 13: </head> 14: <body> 15: <div class="layout"> 16: <h3 class="since">since 2004/06</h3> 17: <div class="body"> 18: <div class="titleimg"> 19: <div class="titleshadow">What's XML</div> 20: <div class="titlemain">What's XML</div> 21: </div> 22: <h2 class="title">CDコレクション</h2> 23: <p> 24: <xsl:value-of select="menu/exp" /> 25: </p> 26: <xsl:apply-templates select="menu/cd_sub" /> 27: </div> 28: </div> 29: </body> 30: </html> 31:</xsl:template> 32:<xsl:template match="cd_sub"> 33: <table class="diary"> 34: <tr> 35: <td class="diarydate"><xsl:value-of select="document(@data)//cddata/date" /></td> 36: <td class="diarysubtitle"><xsl:value-of select="document(@data)//cddata/title" />/<xsl:value-of select="document(@data)//cddata/artist" /></td> 37: </tr> 38: <tr> 39: <td colspan="2" class="diaryexp"> 40: <pre> 41: <xsl:value-of select="document(@data)//cddata/data" /> 42: </pre> 43: </td> 44: </tr> 45: </table> 46:</xsl:template> 47:</xsl:stylesheet>

まず、各ファイルの関係の説明を。 最初にも書いた通り、sample11.xmlがメインとなります。 このsample11.xmlを上記のsample11.xslで変換します。 この変換の段階で、sample11.xml内で指定したcd01〜cd03.xmlを参照する、という流れになります。 ではXSLの説明を。 31行までは、今までとほとんど変わりません。タグが変わっただけです。 32行からの「cd_sub」テンプレートが今回のメインです。 35,36,41行にある、「document(@data)」がそれです。 これは、カッコ内で指定したxmlデータを参照しますよーと言う命令です。 で、その後に続いている「//cddata/date」は、参照したXMLデータ(ここではcd01〜03.xml)内の cddata/dateを取り出すぜーと言う意味になります。 ちなみに何気なく使われている「@data」ですが、これはパラメータを指定する場合、先頭に「@」 をつける決まりがあります。この場合、「cd_sub」のパラメータ「data」を使っているので「@data」と なっています。 さてこれを表示すると こんな感じになります。 XSL うーん、今回は説明がちゃんと出来てないような^^; やっぱり図が必要かなぁ・・・追加してみました。 とりあえず今回は以上です・・・もっと精進します・・・ 次回は、どうしよっかなぁ、考えときます^^;

kajikaji
kajikaji