XMLってなぁに? 初級編 第13回
2005/08/14
この文書は執筆時点(2004/後半)での知識を基にしており、現状とあっていない可能性があります。
第13回
問い:全店舗の商品一覧を取得するxslを考えてみよう。
前回までのxslを多少変更して見た結果がこれだ。
a.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/ROOT/店舗/在庫"><xsl:value-of select="商品" />
</xsl:template>
</xsl:stylesheet>
結果.txt
東京店HDDレコーダ大阪店HDDレコーダ
うーむわけがわからん。
value-ofには商品を指定しているのに店舗名は出ていないし、商品は最初の1個しか表示されていない。
まず商品が1個しか表示されていないのは、value-ofが1個だけ表示する機能しかないからで、同じ要素が続けて登場したときには対応できない。
このような場合にはfor-eachを利用する。
a.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/ROOT/店舗/在庫">
<xsl:for-each select="商品">
<xsl:value-of select="text()" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
結果.txt
東京店HDDレコーダCDプレイヤー大阪店HDDレコーダCDプレイヤーPC
このように複数個出現する要素にはfor-eachを利用しよう。