xsl:sort 記述例

記述例1

ソースXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<student>
    <name>Jimmy</name>
    <name>Tom</name>
    <name>Andy</name>
    <name>Bill</name>
</student>

XSLTスタイルシート
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <list>
      <ascending>
        <xsl:for-each select="//name">
          <xsl:sort />
          <xsl:value-of select="." />
        </xsl:for-each>
      </ascending>
    </list>
  </xsl:template>
</xsl:stylesheet>
xsl:sort要素でselect属性が指定されていない場合は、カレントノードがソートキーになる。デフォルト値である昇順が適用される。

結果XML文書

<?xml version="1.0" encoding="UTF-8"?>
<list>
  <ascending>
    Andy
    Bill
    Jimmy
    Tom
  </ascending>
</list>

記述例2

ソースXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<productlist>
  <product>
      <name code="00123">洗濯機</name>
      <price>128000</price>
  </product>
  <product>
      <name code="00001">掃除機</name>
      <price>128000</price>
  </product>
  <product>
      <name code="00241">乾燥機</name>
      <price>258000</price>
  </product>
  <product>
      <name code="00338">エアコン</name>
      <price>98000</price>
 </product>
</productlist>

XSLTスタイルシート
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <root>
      <xsl:apply-templates select="productlist/product" >
        <xsl:sort select="price"/>
      </xsl:apply-templates>
    </root>
  </xsl:template>
 
  <xsl:template match="product">
    <code><xsl:value-of select="name/@code" /></code>
    <name><xsl:value-of select="name" /></name>
    <price><xsl:value-of select="price" /></price>
  </xsl:template>
</xsl:stylesheet>
price要素で文字列としてソート。<xsl:sort select="price"/>を<xsl:sort select="price" data-type="number"/>に変更すれば、値を数値としてソートされる。

結果XML文書

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <code>00123</code><name>洗濯機</name><price>128000</price>
 <code>00001</code><name>掃除機</name><price>128000</price>
 <code>00241</code><name>乾燥機</name><price>258000</price>
 <code>00338</code><name>エアコン</name><price>98000</price>
</root>

記述例3

ソースXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<productlist>
  <product>
      <name code="00123">洗濯機</name>
      <price>128000</price>
  </product>
  <product>
      <name code="00001">掃除機</name>
      <price>128000</price>
  </product>
  <product>
      <name code="00241">乾燥機</name>
      <price>258000</price>
  </product>
  <product>
      <name code="00338">エアコン</name>
      <price>98000</price>
 </product>
</productlist>

XSLTスタイルシート
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <root>
      <xsl:apply-templates select="productlist/product" >
    <xsl:sort select="price" data-type="number" />
    <xsl:sort select="name/@code" data-type="number" />
      </xsl:apply-templates>
    </root>
  </xsl:template>
 
 <xsl:template match="product">
    <code><xsl:value-of select="name/@code" /></code>
    <name><xsl:value-of select="name" /></name>
    <price><xsl:value-of select="price" /></price>
  </xsl:template>
</xsl:stylesheet>
xsl:sort要素を複数記述する。(price要素でソートした後、code属性でソート)

結果XML文書

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <code>00338</code><name>エアコン</name><price>98000</price>
 <code>00001</code><name>掃除機</name><price>128000</price>
 <code>00123</code><name>洗濯機</name><price>128000</price>
 <code>00241</code><name>乾燥機</name><price>258000</price>
</root>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License