![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
質問は、xsltでソート後に上位n件(例えばTOP10等)のみの要素を表示する事は可能でしょうか?
邦楽各曲の月間売り上げをまとめた表があり、この中で曲の要素が100個あったとします。
要素の中に何枚売れたかを示すデータがあって、これごとにソートをしてランキング形式で全件表示する事はできると思うのですが、上位10件を表示する、というような方法が見つからず困っています。
java等を用いるのであれば簡単なのですが、極力xsltでの変換を行いたいのです。
このような方法をどなたかご存知の方がいらっしゃいましたら、私的な質問で大変恐れ入りますがご教授頂ければと思っております。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
================Q4352267A.xml===============
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>絶対儲かる ルピーの稼ぎ方</title>
<price>200</price>
</book>
<book>
<title>フックショットの使い方 入門編</title>
<price>50</price>
</book>
<book>
<title>ハイラル城 鳥瞰図</title>
<price>500</price>
</book>
<book>
<title>早く走れる靴ランキング </title>
<price>100</price>
</book>
<book>
<title>世界の泉探索 -秋は夕暮れ-</title>
<price>220</price>
</book>
<book>
<title>ハートを求めて</title>
<price>2000</price>
</book>
<book>
<title>妖精の生態</title>
<price>500</price>
</book>
<book>
<title>世界の物語 53 闇の世界へようこそ!</title>
<price>1500</price>
</book>
<book>
<title>オカリナさんは俺の嫁!</title>
<price>800</price>
</book>
<book>
<title>ペンダントに使う宝石</title>
<price>450</price>
</book>
</books>
================Q4352267B.xsl===============
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/books">
<books>
<xsl:for-each select="book">
<xsl:sort select="price" data-type="number"
/>
<xsl:if test="position() <= 5 ">
<book>
<xsl:value-of select="position()" />:<xsl:value-of select="title" />:<xsl:value-of select="price" />
</book>
</xsl:if>
</xsl:for-each>
</books>
</xsl:template>
</xsl:stylesheet>
===============Q4352267C.xml(結果。10件中5件を抽出。本の題名に突っ込んではならない.
)============
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>1:フックショットの使い方 入門編:50</book>
<book>2:早く走れる靴ランキング :100</book>
<book>3:絶対儲かる ルピーの稼ぎ方:200</book>
<book>4:世界の泉探索 -秋は夕暮れ-:220</book>
<book>5:ペンダントに使う宝石:450</book>
</books>
==============================
おまけ:猛烈な勘違いをしたようで,ソートルーチンを自作していた。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/books">
<hoge>
<xsl:call-template name="minimum">
<xsl:with-param name="rank" select="1" />
<xsl:with-param name="all" select="book" />
<xsl:with-param name="min" select="book[1]" />
<xsl:with-param name="nodes" select="book[position() > 1]" />
</xsl:call-template>
</hoge>
</xsl:template>
<xsl:template name="minimum">
<xsl:param name="rank" />
<xsl:param name="all"/>
<xsl:param name="min" />
<xsl:param name="nodes" />
<xsl:if test="$rank < 6">
<xsl:choose>
<xsl:when test="count($nodes) = 0">
<p><xsl:value-of select="$min/price" /></p>
<xsl:call-template name="minimum">
<xsl:with-param name="rank" select="$rank + 1" />
<xsl:with-param name="all" select="$all[ . != $min]" />
<xsl:with-param name="min" select="$all[ . != $min][position() = 1]" />
<xsl:with-param name="nodes" select="$all[ . != $min][position() > 1]" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$nodes[1]/price < $min/price ">
<xsl:call-template name="minimum">
<xsl:with-param name="rank" select="$rank" />
<xsl:with-param name="all" select="$all" />
<xsl:with-param name="min" select="$nodes[1]" />
<xsl:with-param name="nodes" select="$nodes[position() > 1]" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="minimum">
<xsl:with-param name="rank" select="$rank" />
<xsl:with-param name="all" select="$all" />
<xsl:with-param name="min" select="$min" />
<xsl:with-param name="nodes" select="$nodes[position() > 1]" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ピボットテーブルの表示変更の仕方 初心者なので、的外れな質問だったらすみません 受注日ごとに商品名と 1 2022/04/26 23:23
- Google Drive Google Drive (G:)の容量を、購入した容量と一致させるにはどうすればよいでしょうか? 1 2022/04/10 22:32
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- HTML・CSS HTMLの条件によって表示方向が切り替わる実装のコードを教えて下さい。 (コードは下記リンクを参照) 1 2022/09/25 14:35
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- アプリ 著作権に関する質問です 3 2023/02/11 10:31
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
公文書のxmlファイルの開き方が...
-
ワードで文字を入力する時の変...
-
XMLを作成してもタグしか表示さ...
-
ファイル名の一部削除について
-
XMLの編集?について
-
スマホのスプレッドシートでセ...
-
Excel関数で、セル内の文字列の...
-
【BAT(バッチ)ファイル】Web...
-
XMLとは何ですか?
-
特殊文字の検索方法
-
フォルダー内検索
-
Webページに関するさまざまな情...
-
head要素
-
ヤフー知恵袋みたいなサイトを...
-
メールアドレスについて
-
マスターノード
-
エクセルのマクロについて教え...
-
クラウドサービスのlaaS paaS s...
-
flexBOX同士の間隔
-
マイナポータルの住宅借入金当...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XSLで、XMLの空タグを制御したい。
-
タグの有無の判定
-
XSLでXMLデータをタブ区切りデ...
-
XSLTで固定長データファイルを...
-
XSL中の改行、タブを無効にした...
-
xmlのテキストにリンクを張りた...
-
重複するものを消したい
-
XSLTがブラウザで表示されません。
-
うまく表示されない
-
文字列の取得
-
xsl:param要素をxsl:templateの...
-
value-ofの値を属性値とするには
-
XMLをXSLを使いHTMLに変換した...
-
XMLから指定テキストのみを抜き...
-
ある文字列を含むノードが存在...
-
VBAからxml・スタイルシートを...
-
xsl、xpath式の書き方について
-
XSLで特定のタグだけを出力する...
-
XSL内でJavaScriptを記述し、Ja...
-
XSLTで直下のテキストのみ取得...
おすすめ情報