Web Artisan Blog - ウェブ アルチザン ブログ

XML:XSLT:for-eachを使用しての繰り返し処理:その使い方の切り分け

XML (18 items)

2004年10月28日

■for-each
指定したノードに対して、繰り返し処理を行う。


<記述例>

<xsl:for-each select="./count">
  test1:<xsl:value-of select="." /><br />
</xsl:for-each>



XSLTにおいて、XMLデータのノードを辿って処理する場合、
基本的には、選択したノードに直接テンプレートを指定すればよい。
しかし、ノードを順に辿っていく過程で、前にあったノードを参照したい場合がある。
更に、その前にあったノードで繰り返し処理を行いたい場合などには、
”for-each”の繰り返し処理を適用する事で実現可能となる。

<スポンサードリンク>
<使用例>
・XMLデータ(data8.xml)

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="data8.xsl"?>
<test>
 <test1>
  <test2>
   <count>3</count>
   <count>5</count>
   <count>1</count>
   <count>4</count>
   <count>2</count>
  </test2>
 </test1>
 <data>
  <test3>
   <test4>
    <count>1</count>
    <count>2</count>
   </test4>
  </test3>
 </data>
</test>



・XMLデータを編集するXSLT(data8.xsl)

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:output
 method="html" 
 version="1.0" 
 encoding="Shift_JIS" 
 omit-xml-declaration="yes"
 standalone="yes"
 doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
 indent="yes" 
 media-type="text/html"/>

<xsl:template match="/">

  <html>
  <head>
  <title>Result</title>
  </head>
  <body>

 <xsl:apply-templates />

  </body>
  </html>

</xsl:template> 

<xsl:template match="test">
<!-- dataノードを選択 -->
  <xsl:apply-templates select="data" />
</xsl:template> 

<xsl:template match="data">・・・(1)
<!-- dataノード配下のtest3、test4を経てcountノードの値を取得 -->
  <xsl:apply-templates select="test3/test4/count" />
  <br />
<!-- test1ノード配下のtest2を経てcountノードの値をループ処理で取得 -->
  <xsl:for-each select="../test1/test2/count">・・・(2)
    test2ノード配下のcountノードデータ:<xsl:value-of select="." /><br />
  </xsl:for-each>
</xsl:template> 

<xsl:template match="test3/test4/count">・・・(1)
    test4ノード配下のcountノードデータ:<xsl:value-of select="." /><br />
</xsl:template> 

</xsl:stylesheet>



※(1)選択したノードに直接テンプレートを指定
※(2)前にあったノードで繰り返し処理を行いたいので”for-each”の繰り返し処理

・生成したHTML

<html>
<head>
<title>Result</title>
</head>
<body>
test4ノード配下のcountノードデータ:1
test4ノード配下のcountノードデータ:2
<br />
test2ノード配下のcountノードデータ:3
test2ノード配下のcountノードデータ:5
test2ノード配下のcountノードデータ:1
test2ノード配下のcountノードデータ:4
test2ノード配下のcountノードデータ:2
</body>
</html>




■使用例のダウンロード
ダウンロードし、data8.xmlをブラウザで見る事で確認できます。

>>ダウンロード
※XSLTの動くブラウザでお試し下さい。IEであればIE6以上です。

<スポンサードリンク>
前の記事 次の記事

Comments

take wrote:

参考にさせて頂きました。
どうもです。
2005年11月03日 10時31分28秒

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=327