CDの保有枚数を教えてください

<test>
 <item id="001">
  <name>foo</name>
 </item>
 <item id="002">
  <name>bar</name>
 </item>
 <detail>
  <itemid>001</itemid>
  <yomigana>フー</yomigana>
 </detail>
 <detail>
  <itemid>002</itemid>
  <yomigana>バー</yomigana>
 </detail>
</test>

上記のようなXML文書から次のようなcsvファイルをつくろうと考えています。

フー,foo
バー,bar

つまり、「item要素の属性idの値」と「itemid要素の値」が同じものを対にして並べたいのですが、
これがなんともxslでうまいやり方が書けません。
(※実際には、item要素とdetail要素が上記のようにいくつも並びます。
item要素やdetail要素の数は状態によって可変ですが、item要素とdetail要素は必ず1対1で存在します。)

どなたかご教示お願いします。
(※XML文書の構成改変はできません)

A 回答 (1件)

XML/XSLド素人ですのでご容赦を。



二重ループで変数に退避した値と比べてマッチングしたみました。
数が多いと時間が掛かりそうなんでつかいものにならないかも。

<xsl:for-each select="test/item">
<xsl:variable name="id">
<xsl:value-of select="@id" />
</xsl:variable>
<xsl:for-each select="/test/detail">
<xsl:if test="$id=itemid">
<xsl:value-of select="yomigana" />
</xsl:if>
</xsl:for-each>
,<xsl:value-of select="name"/>
</xsl:for-each>
    • good
    • 0
この回答へのお礼

返信が大変遅くなって申し訳ありません。
回答ありがとうございます。

xslの変数は使用頻度が低く、あまり使ったことがありませんでした。
しかも固定値しかもてないイメージが強いため、
よく使うリテラルを埋めておくくらいのものとしか考えていませんでしたが、
こういう使い方をするのですね。

回答頂いた方法でうまくいきました。
大変ありがとうございました。

お礼日時:2007/08/22 00:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報