- ベストアンサー
xsltでソート後に上位n件の要素を表示する方法
- xsltでソート後に上位n件の要素を表示する方法について教えてください。
- 邦楽曲の月間売り上げ表において、要素の中で上位10件を表示する方法をxsltで行いたいです。
- javaを用いずにxsltでソートされた要素の中から上位10件を表示する方法を教えてください。
- みんなの回答 (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>
補足
出来ました! サンプルまで着けて頂いて感謝です。 ゼルダが好きなんですね。