伸び縮みマークアップ言語 XML
■ データを1件表示

■ 1件だけ表示するには

同じ名前の要素が複数ある中の、1件だけを表示するには必要なノードだけを指定します。 例えば「在庫」要素の中にある複数存在する「商品」要素の中で、 テキストノードに「」を持つ「商品」要素を指定するには、  在庫[商品="本"] とします。

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample20.xml」、 XSLTスタイルシートを「test20.xsl」 として保存します。「sample20.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test20.xsl」と指定して下さい。

■ sample20.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test20.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <ID>001</ID>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
  <メール>xxx@xxx.xx</メール>
 </会員>
 <会員>
  <ID>002</ID>
  <氏名 ヨミ="シンシュクマルコ">伸縮○子</氏名>
  <住所>東京都</住所>
  <メール>mmm@mmm.mm</メール>
 </会員>
 <会員>
  <ID>003</ID>
  <氏名 ヨミ="シンシュクマルヨ">伸縮○代</氏名>
  <住所>大阪府</住所>
  <メール>lll@lll.ll</メール>
 </会員>
</会員情報>

■ test20.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:apply-templates select="会員[ID='003']"/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <b>ID<xsl:value-of select="./ID"/></b><br/>
  氏名 <xsl:value-of select="./氏名"/>
  「<xsl:value-of select="./氏名/@ヨミ"/>」<br/>
  住所 <xsl:value-of select="./住所"/><br/>
  メール <xsl:value-of select="./メール"/>
 </xsl:template>
</xsl:stylesheet>

この例では、「xsl:apply-templates」要素の「select」属性に 「会員[ID='003']」を指定しています。 このようにすると、「ID」が「003」の会員データだけを指定した事になります。 なお、「select」属性に「会員」と指定すると、全ての会員情報のデータが表示されます。

これらを記述してsample20.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

ID003
氏名 伸縮○代「シンシュクマルヨ」
住所 大阪府
メール lll@lll.ll


■ データを決められた件数だけ表示する

■ 再帰処理を使用

会員データ中に記述された、会員ごとの購入回数を、再帰処理を使用して表示します。 「xsl:for-each」要素で全員のデータに繰り返し処理を行います。 ここでは購入回数を数値で設定し、その数だけを表示します。

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample21.xml」、 XSLTスタイルシートを「test21.xsl」 として保存します。「sample21.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test21.xsl」と指定して下さい。

■ sample21.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test21.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
  <購入回数>6</購入回数>
 </会員>
 <会員>
  <氏名 ヨミ="シンシュクマルコ">伸縮○子</氏名>
  <住所>東京都</住所>
  <購入回数>3</購入回数>
 </会員>
 <会員>
  <氏名 ヨミ="シンシュクマルヨ">伸縮○代</氏名>
  <住所>大阪府</住所>
  <購入回数>8</購入回数>
 </会員>
</会員情報>

■ test21.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:param name="印">■</xsl:param>
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:for-each select="会員">
     <xsl:value-of select="氏名"/>さんの購入回数は
     <xsl:call-template name="購入回数表示">
      <xsl:with-param name="繰り返し" select="購入回数"/>
     </xsl:call-template>になります<br/>
    </xsl:for-each>
   </body>
  </html>
 </xsl:template>
 <xsl:template name="購入回数表示">
  <xsl:param name="繰り返し"/>
  <xsl:param name="カウンタ" select="1"/>
   <xsl:if test="$繰り返し&#62;=$カウンタ">
    <xsl:value-of select="$印"/>
    <xsl:call-template name="購入回数表示">
     <xsl:with-param name="繰り返し" select="$繰り返し"/>
     <xsl:with-param name="カウンタ" select="$カウンタ+1"/>
    </xsl:call-template>
   </xsl:if>
 </xsl:template>
</xsl:stylesheet>

この例では、 変数である「」にを割り当て、 「xsl:for-each」で会員情報を処理しています。 「購入回数表示」のテンプレートを呼び、 各「購入回数」要素を表示します。 そしてこの中から同じテンプレート「購入回数表示」を呼び (再帰処理)、 「購入回数」の数を「」で表示しています。

これらを記述してsample21.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

伸縮○雄さんの購入回数は ■■■■■■になります
伸縮○子さんの購入回数は ■■■になります
伸縮○代さんの購入回数は ■■■■■■■■になります


■ テキストと要素が混在している場合のテキスト抽出法

■ テキスト・要素の混在

<XXX要素>テキストA<MMM要素>テキストB</MMM要素></XXX要素>

上記のように、XXX要素の内容にテキストと要素が混在しており、XXX要素のテキストノードだけが含まれるデータを <xsl:value-of select="XXX要素"/> とすると、表示結果は「テキストAテキストB」となります。 この場合にXXX要素内の「テキストA」だけを表示したい場合、 <xsl:value-of select="XXX要素/text()"/> と記述します。

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample22.xml」、 XSLTスタイルシートを「test22.xsl」 として保存します。「sample22.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test22.xsl」と指定して下さい。

■ sample22.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test22.xsl" type="text/xsl"?>
<役員情報>
 <役員>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄
   <役職>代表</役職>
  </氏名>
  <住所>神奈川県</住所>
  <メール>xml@xml.com</メール>
 </役員>
</役員情報>

■ test22.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="役員情報">
  <html>
   <body>
    <xsl:apply-templates select="役員"/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="役員">
  XX部署スタッフ各位<br/>
  <br/>
  いつもお世話になっております。<br/>
  先日ご連絡しました企画の内容について、承認がおりましたので
  各自ご確認の程よろしくお願い致します。<br/>
  <br/>
  平成XX年MM月LL日<br/>
  <xsl:value-of select="./氏名/text()"/><br/>
  EMAIL: <xsl:value-of select="./メール"/>
 </xsl:template>
</xsl:stylesheet>

この例では、 「役員情報」テンプレート内の xsl:value-of要素のselect属性に、 「氏名」要素内の特定のテキストだけを呼び出す 「./氏名/text()」を指定しています。 こうする事で、氏名要素内の子要素である「役職」要素のテキストは表示されずに、 「氏名」要素のテキストだけが表示されます。

これらを記述してsample22.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

XX部署スタッフ各位

いつもお世話になっております。
先日ご連絡しました企画の内容について、承認がおりましたので各自ご確認の程よろしくお願い致します。

平成XX年MM月LL日
伸縮○雄
EMAIL: xml@xml.com


■ データを全て表示する

■ 要素を全て指定する

<xsl:apply-templates select="*"/>

<xsl:apply-templates/>

上記のように、 「xsl:apply-templates」要素のselect属性に 「*」を指定すると、 その時に処理しているノード下にある要素を全て処理する事ができます。 select属性を記述しない場合も同じ意味になります。 XPath式での「*」は処理中のノードの下、全ての要素を指します。

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample23.xml」、 XSLTスタイルシートを「test23.xsl」 として保存します。「sample23.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test23.xsl」と指定して下さい。

■ sample23.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test23.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
 </会員>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
 </会員>
 <会員>
  <番号>3</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
 </会員>
</会員情報>

■ test23.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:apply-templates select="*"/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <b><xsl:value-of select="./番号"/></b>
  <xsl:text>  </xsl:text>
  <xsl:value-of select="./氏名"/>
  <xsl:text>  </xsl:text>
  <xsl:value-of select="./氏名/@ヨミ"/>
  <xsl:text>  </xsl:text>
  <xsl:value-of select="./住所"/><br/>
 </xsl:template>
</xsl:stylesheet>

この例では、 「会員情報」テンプレート内の xsl:apply-templates要素のselect属性に、 「*」を指定しています。 データの間にスペースを入れて表示させる為に、 <xsl:text></xsl:text>の間に 全角のスペースを挿入してスペースを表示させます。

これらを記述してsample23.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

1  伸縮○雄  シンシュクマルオ  神奈川県
2  伸縮○太郎  シンシュクマルタロウ  大阪府
3  伸縮○之助  シンシュクマルノスケ  鳥取県

■ 表示するデータを並べ替える

■ xsl:sortを使用する

表示データを並べ替えるには、「xsl:sort」を使用します。 select属性で並べ替えの基準になるノードを指定、data-type属性で 「text」または「number」(データ型)を指定し、 order属性(「ascending」で昇順、 「descending」で降順、省略した場合は昇順) で順序を指定します。これらの要素は「xsl:apply-templates」要素 または「xsl:for-each」要素の子要素として設定して下さい。

<xsl:sort select="XPath式" data-type="データ型" order="順序"/>

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample24.xml」、 XSLTスタイルシートを「test24.xsl」 として保存します。「sample24.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test24.xsl」と指定して下さい。

■ sample24.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test24.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
 </会員>
 <会員>
  <番号>3</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
 </会員>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
 </会員>
 <会員>
  <番号>4</番号>
  <氏名 ヨミ="シンシュクマルコ">伸縮○子</氏名>
  <住所>青森県</住所>
 </会員>
</会員情報>

■ test24.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:apply-templates select="会員">
     <xsl:sort select="番号" data-type="number" order="descending"/>
    </xsl:apply-templates>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <xsl:value-of select="./番号"/>
  <xsl:text>  </xsl:text>
  <xsl:value-of select="./氏名"/>
  <xsl:text>  </xsl:text>
  <xsl:value-of select="./住所"/><br/>
 </xsl:template>
</xsl:stylesheet>

この例では、 「xsl:sort」要素のselect属性で 「番号」要素を並べ替えの基準に指定しています。 data-type属性で「number」を指定、 order属性には「descending」 を指定して降順に並ぶように指定しています。 これにより、データは番号要素の4から1へと並んで表示されます。

これらを記述してsample24.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

4  伸縮○子  青森県
3  伸縮○之助  鳥取県
2  伸縮○太郎  大阪府
1  伸縮○雄  神奈川県

■ 条件式を設定して表示を変える

■ xsl:ifを使用して条件式を設定

ここでは「xsl:if」要素のtext属性に 「position」関数を設定します。 番号要素の値の高い方から順番に並べ替え、「position」関数で設定した条件式より、 並べ替えられたデータの始めから3番目までを取得して表示します。

<xsl:if test="position()" 比較演算子 "設定する数値">
テンプレート
</xsl:if>

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample25.xml」、 XSLTスタイルシートを「test25.xsl」 として保存します。「sample25.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test25.xsl」と指定して下さい。 なお、このXML文書は前回の「sample24.xml」ファイル をそのままファイル名だけ変更して使用しています。但し、XSLTスタイルシートを 指定する「xml-stylesheet」処理命令のhref属性に 記述するXSLTスタイルシートのファイル名だけ変更するのを忘れないで下さい。

■ sample25.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test25.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
 </会員>
 <会員>
  <番号>3</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
 </会員>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
 </会員>
 <会員>
  <番号>4</番号>
  <氏名 ヨミ="シンシュクマルコ">伸縮○子</氏名>
  <住所>青森県</住所>
 </会員>
</会員情報>

■ test25.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:apply-templates select="会員">
     <xsl:sort select="番号" data-type="number" order="descending"/>
    </xsl:apply-templates>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <xsl:if test="position() &lt; 4">
   <xsl:value-of select="./番号"/>
   <xsl:text>  </xsl:text>
   <xsl:value-of select="./氏名"/>
   <xsl:text>  </xsl:text>
   <xsl:value-of select="./住所"/><br/>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

この例では、 「xsl:if」要素のtest属性に 「position() &lt; 4」を設定します。 これは並べ替えられたデータの順番<4という事を指し、 この条件式によって並べ替えられたデータの1~3番目だけが表示されます。

これらを記述してsample25.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

4  伸縮○子  青森県
3  伸縮○之助  鳥取県
2  伸縮○太郎  大阪府

■ データを表にして表示する

■ HTMLのテーブルを使用する

HTMLのタグであるテーブルを使用する事で、データを表にして表示することが出来ます。 テーブルのセルの中に(<td>と</td>の間)にデータを出力していきます。 必要な数だけ列を追加する事で、データがセルで区切られ、とても見やすくなります。

<table>
<tr>
<td><xsl:value-of select="XPath式"/></td>
</tr>
</table>

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample26.xml」、 XSLTスタイルシートを「test26.xsl」 として保存します。「sample26.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test26.xsl」と指定して下さい。

■ sample26.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test26.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
 </会員>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
 </会員>
</会員情報>

■ test26.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <xsl:apply-templates select="会員"/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <table border="1">
   <tr>
    <td><xsl:value-of select="./番号"/></td>
    <td><xsl:value-of select="./氏名"/></td>
    <td><xsl:value-of select="./住所"/></td>

   </tr>
  </table>
 </xsl:template>
</xsl:stylesheet>

この例では、 <table>タグに属性「border="1"」を追加して枠線を表示させています。 表示させたい列の数だけ<td></td>を追加し、間に 「xsl:value-of」要素を記述していきます。

これらを記述してsample26.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

2伸縮○太郎大阪府
1伸縮○之助鳥取県

■ 複数件のデータを1つの表にして表示する

■ 見出しをつけた複数件の表形式

前回もデータを表形式にして表示しました。今回は1つの表に複数件のデータを表示させます。 「xsl:apply-templates」要素を使用して、 「tr」でデータを囲んだテンプレートを 、データの数だけ繰り返し処理させます。ここでは見出しもつけることにします。

■繰り返し処理で呼び出すテンプレート
<tr>
 <td><xsl:value-of select="XPath式"/></td>
 <td><xsl:value-of select="XPath式"/></td>
 <td><xsl:value-of select="XPath式"/></td>
 <td><xsl:value-of select="XPath式"/></td>
</tr>

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample27.xml」、 XSLTスタイルシートを「test27.xsl」 として保存します。「sample27.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test27.xsl」と指定して下さい。

■ sample27.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test27.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
 </会員>
 <会員>
  <番号>3</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
 </会員>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルオ">伸縮○雄</氏名>
  <住所>神奈川県</住所>
 </会員>
 <会員>
  <番号>4</番号>
  <氏名 ヨミ="シンシュクマルコ">伸縮○子</氏名>
  <住所>青森県</住所>
 </会員>
</会員情報>

■ test27.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <table border="1">
     <tr>
      <th>番号</th>
      <th>氏名</th>
      <th>住所</th>
     </tr>
     <xsl:apply-templates select="会員">
      <xsl:sort select="番号" data-type="number"/>
     </xsl:apply-templates>
    </table>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <tr>
   <td><xsl:value-of select="./番号"/></td>
   <td><xsl:value-of select="./氏名"/></td>
   <td><xsl:value-of select="./住所"/></td>
  </tr>

 </xsl:template>
</xsl:stylesheet>

この例では、 <table>タグに属性「border="1"」を追加して枠線を表示させています。 会員情報のテンプレートにテーブルと見出し・それにデータ部分を表示する、 「xsl:apply-templates」要素を記述します。このテンプレート内では 「xsl:sort」によって並び順を指定しています。(order属性を省略した場合は昇順) 会員テンプレート部分にtrで囲まれたデータを記述することにより データの数だけtrに囲まれた部分を出力します。

これらを記述してsample27.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。

番号 氏名 住所
1伸縮○雄神奈川県
2伸縮○太郎大阪府
3伸縮○之助鳥取県
4伸縮○子青森県

■ リンクを加える

■ xsl:elementとxsl:attributeを使用する

xsl:element」と「xsl:attribute」を使用して、 HTMLの要素と属性を生成します。 「xsl:element」ではリンクを貼るタグ「a」を生成し、 「xsl:attribute」では href属性を生成します。これにより、URLのリンクやメールアドレスのリンクを張ることができます。 メールへのリンクの場合は、アドレスの前に「mail:to」を記述します。

<xsl:element name="a">
 <xsl:attribute name="href">

  URLを記述
 </xsl:attribute>リンク文字列
</xsl:element>

▼ ▼ ▼

<a href="URL">リンク文字列</a>

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample28.xml」、 XSLTスタイルシートを「test28.xsl」 として保存します。「sample28.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test28.xsl」と指定して下さい。

■ sample28.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test28.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
  <メール>marutarou@ykr414.com</メール>
 </会員>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
  <メール>marunosuke@ykr414.com</メール>
 </会員>
</会員情報>

■ test28.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="会員情報">
  <html>
   <body>
    <table border="1">
     <tr>
      <th>番号</th>
      <th>氏名</th>
      <th>住所</th>
      <th>メール</th>
     </tr>
     <xsl:apply-templates select="会員"/>
    </table>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="会員">
  <tr>
   <td><xsl:value-of select="./番号"/></td>
   <td><xsl:value-of select="./氏名"/></td>
   <td><xsl:value-of select="./住所"/></td>
   <td>
    <xsl:element name="a">
     <xsl:attribute name="href">
      mailto:<xsl:value-of select="./メール"/>
     </xsl:attribute>
     <xsl:value-of select="./メール"/>
    </xsl:element>

   </td>
  </tr>
 </xsl:template>
</xsl:stylesheet>

この例では、 xsl:element要素のname属性に「a」 を設定、xsl:attribute要素のname属性には 「href」を設定しています。 内容にはメールアドレスを出力するように、 xsl:value-of要素を記述し、 要素の前にmailto:を記述します。

これらを記述してsample28.xmlファイルを開くと、(上記の2つのファイルは同じフォルダに入れて下さい。) 下記のような実行結果になります。(下記のメールアドレスは実在しません)

番号 氏名 住所 メール
1伸縮○太郎大阪府 marutarou@ykr414.com
2伸縮○之助鳥取県 marunosuke@ykr414.com

■ データをCSV形式で出力する

■ カンマ区切りのデータを生成

様々なアプリケーションで扱う事の出来るCSV形式のデータを出力する事で、 データの受け渡しなどに利用する事ができます。 データとデータの間をカンマ「,」で区切り、1件ごとのデータは 改行で区切ります。

では、例題を取り上げてみましょう。
以下の2つのファイルをご覧下さい。XML文書を「sample29.xml」、 XSLTスタイルシートを「test29.xsl」 として保存します。「sample29.xml」ファイルに記述する xml-stylesheet処理命令href属性に 「test29.xsl」と指定して下さい。

■ sample29.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test29.xsl" type="text/xsl"?>
<会員情報>
 <会員>
  <番号>1</番号>
  <氏名 ヨミ="シンシュクマルタロウ">伸縮○太郎</氏名>
  <住所>大阪府</住所>
  <メール>marutarou@ykr414.com</メール>
 </会員>
 <会員>
  <番号>2</番号>
  <氏名 ヨミ="シンシュクマルノスケ">伸縮○之助</氏名>
  <住所>鳥取県</住所>
  <メール>marunosuke@ykr414.com</メール>
 </会員>
</会員情報>

■ test29.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="Shift_JIS"/>
 <xsl:template match="会員情報">
  <xsl:apply-templates select="会員"/>
 </xsl:template>
 <xsl:template match="会員">
  <xsl:value-of select="./番号"/><xsl:text>,</xsl:text> ←カンマ「,」を入れます。
  <xsl:value-of select="./氏名"/><xsl:text>,</xsl:text>
  <xsl:value-of select="./メール"/><xsl:text>,</xsl:text>
  <xsl:value-of select="./住所"/>
<xsl:text>
</xsl:text>

 </xsl:template>
</xsl:stylesheet>

この例では、 テキストで出力する為に、 「xsl:output」要素に「method="text"」を設定します。 <xsl:text></xsl:text> の間にカンマを記述して出力、 <xsl:text></xsl:text> の要素内で改行することで、 一件のデータの区切りである改行を出力しています。

これらを記述してmsxsl.exeを使用します。 (上記の2つのファイルは同じフォルダに入れて下さい。) コマンドプロンプトを開き、 「msxsl sample29.xml test29.xsl -o sample.csv」 と入力して実行してください。sample.csvファイルが出力されるはずです。 ファイルを開くと下記のような実行結果になります。

1,伸縮○太郎,marutarou@ykr414.com,大阪府
2,伸縮○之助,marunosuke@ykr414.com,鳥取県

«««« back          next  »»»»
 
XMLとは
XML文書作成の大まかな流れ
XML文書の記述
XML文書ブラウザでの表示
XSLTスタイルシートの適用
XSLTの構造
XML文書の宣言
文字コードの設定
タグ付けのルール
要素名・属性の指定について
階層構造
実体参照・文字参照について
その他・コメントや処理
DTDの記述
名前空間の指定
情報をデータ化する
階層構造の作成
データからXML文書を作成する
会員情報の記述ルールを定義したDTD..
個々のXML文書を作成する
外部実体参照
テンプレートルール
XSLTスタイルシートを記述する 【ノード】
構造を変換する仕組み
テンプレートルールの定義
テンプレートの動作確認
XPathの仕組み  【XPathの関数】
XPathの表記方法
テキストの抽出  xsl:value-of
ノードのコピー  xsl:copy-of
テキストの生成  xsl:text
コメントの生成  xsl:comment
要素の生成  xsl:element
属性の生成  xsl:attribute
属性値の生成  【属性値テンプレート】
出力方法の指定  xsl:output
変数1  xsl:variable
変数2  xsl:param
変数3  xsl:with-param
繰り返し処理  xsl:for-each
再帰処理  xsl:if test
データの並べ替え  xsl:sort
データに番号をつけて出力  xsl:number
条件式に一致時のみ変換処理を実施 xsl:if
複数条件を設定して処理 xsl:choose
XSLTに別のXSLT.. xsl:import xsl:include
XSLT関数について
データを1件表示
データを決められた件数だけ表示
テキストと要素混在時のテキスト抽出法
データを全て表示する
表示するデータを並べ替える
条件式を設定して表示を変える
データを表にして表示する
複数件のデータを1つの表にして表示
リンクを加える  xsl:element xsl:attribute
データをCSV形式で出力する
DOM(Document Object Model)
DOMとjavascript
ノードにアクセスする
ノードにアクセスする 2
ノードにアクセスする 3
XSLTスタイルシートを読み込む
XSLTスタイルシートの切り替え
DOMとjavascriptで検索機能を作成する 1
DOMとjavascriptで検索機能を作成する 2
DOMとjavascriptで検索機能を作成する 3
DOMとjavascriptで検索機能を作成する (XSLTスタイルシート適用)
SVG(Scalable Vector Graphics)
SVG(Scalable Vector Graphics)の基本
「g」タグによるグループ化
図形の座標変換 transform属性
アニメーションを作成する animate要素
アニメーションを作成する animate要素2
イベント
DOMとJavaScriptを使用したイベント処理
XMLとXSLTからSVGを生成する
msxsl.exeのオプション
エラーメッセージの表示
LINK
XML(eXtensible Markup Language) バナーはダウ
ンロードして
お使い下さい。




Copyright © 2004 - ykr414 . All Rights Reserved.