OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

一つ前の値

  • 暇なときにでも
  • 質問No.126962
  • 閲覧数241
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 29% (20/68)

<ALL>
 <EX attr='3'><NAME>B</NAME></EX>
 <EX attr='2'><NAME>B</NAME></EX>
 <EX attr='1'><NAME>A</NAME></EX>
</ALL>

というXMLをつくり

<xsl:for-each select="ALL/EX">
 <xsl:sort select="./NAME"/>
 <xsl:sort select="./@attr"/>
 NAME:<xsl:value-of select="NAME"/>
 attr:<xsl:value-of select="@attr"/><BR/>
</xsl:for-each>

というXSLにかけると
 NAME:A attr:3
 NAME:B attr:1
 NAME:B attr:2
という結果が得られました。これを
 NAME:A attr:3
 NAME:B attr:1
       attr:2
のように、現在のNAMEが前のNAMEと同じ場合は表示しない
ようにしたいのですが上手くいきません。

参考書には現在のNAMEとpreceding-sibling::EX/NAME
の値を比較すると良いと書いてあったので
preceding-sibling::EX/NAMEの値を取ってみたのですが
 NAME:A attr:3 preceding:B
 NAME:B attr:1 preceding:B
 NAME:B attr:2 preceding:
と、なってしまいます。
良い方法はありませんでしょうか教えて下さい。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル7

ベストアンサー率 84% (11/13)

>NAME:A attr:3
>NAME:B attr:1
>NAME:B attr:2
>という結果が得られました。

この結果は正しいのでしょうか?
結果から逆算するとデータは
<ALL>
 <EX attr='1'><NAME>B</NAME></EX>
 <EX attr='2'><NAME>B</NAME></EX>
 <EX attr='3'><NAME>A</NAME></EX>
</ALL>
の書き間違いですね。

--
●preceding-siblingとkey関数を使ってみる

<xsl:key name="NAME" match="EX" use="NAME" />
<xsl:template match="ALL">
<xsl:for-each select="EX[not(NAME = preceding-sibling::EX/NAME)]">
<xsl:sort select="NAME"/>
<dt>NAME:
<xsl:value-of select="NAME"/>
<xsl:for-each select="key('NAME', NAME)">
<xsl:sort select="@attr"/>
<dd>attr:
<xsl:value-of select="@attr"/></dd>
</xsl:for-each>
</dt>
</xsl:for-each>
</xsl:template>
お礼コメント
ryogoku

お礼率 29% (20/68)

すみません!XML間違っていました。
fatbackさんが書いておられる通りでした。
すみません。
おかげ様でできました。
ありがとうございました!!
投稿日時 - 2001-09-03 14:25:41
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ