スポンサーリンク

[XSLT] xsl:sortでソートさせる

<xsl:sort>の概要

<xsl:sort>でソートができる。

  • 属性
    • select:ソートさせたい要素名
    • lang:言語(jaなど)
    • data-type:データの形式指定 {“text” | “number”}
    • order:昇順・降順 {“ascending” | “descending”}

サンプルコード

xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
    <product>
        <name>ペン</name>
        <price>100</price>
    </product>
    <product>			 
        <name>ホチキス</name>
        <price>400</price>  	 
    </product>    
    <product>
        <name>ケシゴム</name>
        <price>100</price>
    </product>
</root>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        
        <xsl:for-each select="root/product">
            <xsl:sort select="price" lang="ja" data-type="number" order="ascending"/>
            <xsl:sort select="name" lang="ja" data-type="text" order="decending"/>
            <商品>
                <商品名><xsl:value-of select="name" /></商品名>
                <価格><xsl:value-of select="price" /></価格>
            </商品>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

変換結果

<?xml version="1.0" encoding="UTF-8"?>
<商品>
<商品名>ケシゴム</商品名>
<価格>100</価格>
</商品>
<商品>
<商品名>ペン</商品名>
<価格>100</価格>
</商品>
<商品>
<商品名>ホチキス</商品名>
<価格>400</価格>
</商品>

解説

最初にpriceでソートをして、
その状態を保ちつつ、そのなかでnameをソートしている。

このソートだが日本語に全て対応できるわけではないので、アルファベットや数値でソートすべき。

XSLT
スポンサーリンク
シェアする
trelab