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

xslでの最小値、最大値の取得

  • すぐに回答を!
  • 質問No.126729
  • 閲覧数232
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 13% (21/151)

<A>
 <B>50</B>
 <B>20</B>
 <B>5</B>
 <B>60</B>
 <B>100</B>
</A>

例えば上のようなXMLがあったとします。
それにxslを適用したときに、最小値と最大値のみを表示させたいのですが、xslではどのような処理をすればよいのでしょうか?


<xsl:for-each select="A">
 <xsl:sort select="./B"/>
 <xsl:value-of select="."/>
</xsl:for-each>

上のようだと全ての<B>が昇順に表示されるだけです。
何か最小値、最大値を取得する関数等ありますでしょうか?
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル8

ベストアンサー率 72% (26/36)

まず、ソートする時にはB要素で繰り返さなくてはなりませんよね。

<xsl:template match="A">
 <table border="1">
  <xsl:for-each select="B">
   <xsl:sort select="." data-type="number"/>
   <tr>
    <td><xsl:value-of select="position()"/></td>
    <td><xsl:value-of select="."/></td>
   </tr>
  </xsl:for-each>
 </table>
</xsl:template>

このようにすると昇順で表示されます
(この例の場合は数字としてソートした方が自然なので、
data-type="number"を指定しました)
一応、HTMLでの出力を想定しています。

昇順にする方法が分かっていれば、最小値最大値を取得するのも容易です。
昇順に並んでいるのですから、その1番目の要素に最小値が、
その最後の要素に最大値が、それぞれ入っていることになります。
それを条件指定で取り出せば良いと思います。

<xsl:template match="A">
 <table border="1">
  <xsl:for-each select="B">
   <xsl:sort select="." data-type="number"/>
   <xsl:if test="position() = 1">
    <tr><td>min</td><td><xsl:value-of select="."/></td></tr>
   </xsl:if>
   <xsl:if test="position() = last()">
    <tr><td>max</td><td><xsl:value-of select="."/></td></tr>
   </xsl:if>
  </xsl:for-each>
 </table>
</xsl:template>

実際はたぶんもっと複雑な事例だとは思いますが、
ここから工夫してみて下さい。
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

-PR-

ピックアップ

-PR-
ページ先頭へ