- PR -

xsl:for-eachについて

1
投稿者投稿内容
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-09 10:57
xslの書き方がわかりませんので、ご教授ください。

xml
----------------------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<contents>
<abcd>
<name>一個目</name>
<xyz>111</xyz>
<xyz>222</xyz>
<xyz>333</xyz>
</abcd>
<abcd>
<name>二個目</name>
<xyz>444</xyz>
<xyz>555</xyz>
<xyz>666</xyz>
</abcd>
<abcd>
<name>三個目</name>
<xyz>777</xyz>
<xyz>888</xyz>
<xyz>999</xyz>
</abcd>
</contents>
----------------------------------------------------------------

xsl
----------------------------------------------------------------
<xsl:for-each select="//abcd">
<xsl:for-each select=xyz">
<xsl:if test="???????">
<xsl:value-of select="../name"/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
----------------------------------------------------------------

とあるとき、
一度、判定文を通り<xsl:value-of select="../name"/>を表示したら
次のabcdに行くまでは表示しないようにしたいと思っています。
ようはタブってnameを表示したくありません。

以上、よろしくお願いします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-03-09 11:38
先頭なら簡単ですが
<xsl:for-each select="//abcd">
<xsl:value-of select="name"/>
<xsl:for-each select=xyz">
</xsl:if>
</xsl:for-each>
</xsl:for-each>

途中から変更では、testしだいです。
test="position() = 2"
など
手続き言語の発想から、抜け出さないとXSLTは完全理解とはいえません。

[ メッセージ編集済み 編集者: MMX 編集日時 2004-03-09 11:45 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-03-09 12:09
ども、ほむらです。

マサキ氏へ
ひとつだけを表示したいのならば走査させるのではなくて
XPathで抽出してあげてから出力したほうがいいと思うのですけど。。

あと、たぶん、<xsl:for-each select="//abcd">は
<xsl:for-each select="./abcd">でいいと思います。
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-09 12:52
MMXさん
ほむらさん
返信ありがとうございました。

自分のイメージだと
for(;{
for(;{
if(条件){
System.out.println("****");
break;
}
}
}

break;みたいなのがあればと思ったんですが
考え方が違うんですね

XPathを調べてみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)