如何使用xslt对min值进行排序?

时间:2012-02-16 07:24:17

标签: xslt

下面是我的xml文件test.xml

<products>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>30</totalprice>
        <items>
            <item>Pen</item> 
            <price>10</price>
        </items>
        <items>
            <item>Pencil</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>23</totalprice>
        <items>
            <item>Pencil</item> 
            <price>8</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>10</price>
        </items>        
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>24</totalprice>
        <items>
            <item>Paper Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>13</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1002</supplierid>
        <totalprice>26</totalprice>
        <items>
            <item>Sharpner Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
</products>

我需要使用xsl 1.0或2.0

获取如下输出
<products>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>23</totalprice>
        <items>
            <item>Pencil</item> 
            <price>8</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>5</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>10</price>
        </items>        
    </supplier>
    <supplier>
        <supplierid>1001</supplierid>
        <totalprice>24</totalprice>
        <items>
            <item>Paper Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>13</price>
        </items>
    </supplier>
    <supplier>
        <supplierid>1002</supplierid>
        <totalprice>26</totalprice>
        <items>
            <item>Sharpner Box</item> 
            <price>7</price>
        </items>
        <items>
            <item>Pen</item> 
            <price>4</price>
        </items>
        <items>
            <item>Bag</item> 
            <price>15</price>
        </items>
    </supplier>
</products>
  1. 从“相同供应商”中选择较低的价格,例如<supplierid>1001</supplierid>
  2. 基于子节点<items>
  3. 1001/23和1001/30基于<items><item>相同。我们需要从列表中删除1001/30。因为价格很高

2 个答案:

答案 0 :(得分:0)

基于您希望根据供应商的总价格对供应商进行分类的假设:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<products>
  <xsl:for-each select="products/supplier">  
    <xsl:sort select="totalprice" data-type="number" order="ascending"/>  
      <xsl:copy-of select="."/>  
  </xsl:for-each> 
</products>
</xsl:template>
</xsl:transform>

答案 1 :(得分:0)

这将首先根据supplierid进行排序,然后根据totalprice

进行排序
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()">
                <xsl:sort select="supplierid"/>  <!-- 1st level sorting -->
                <xsl:sort select="totalprice"/>  <!-- 2nd level sorting -->
                <xsl:sort select="price"/>       <!-- 3rd level sorting -->
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

注意:您可以使用名为Online XSLT Test Tool的免费在线工具来测试您的xml / xslt文件。