2012-02-16 105 views
-1

是我所謂的XML文件的test.xml如何使用xslt對最小值進行排序?下面

<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

你能解釋一下比較清楚嗎?在你的輸入和輸出中,也沒有太大的區別。 – 2012-02-16 07:30:04

+0

它是你想要排序的總價嗎? – Kristofer 2012-02-16 07:30:12

+0

基於那裏。例如供應商:1001有2個總價格30和23。總價格基於。如果在那裏列表相同。根據總價格以便宜的價格排序 – user475464 2012-02-16 07:33:59

回答

0

根據您喜歡基於他們totalprice供應商排序的假設:

<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> 
+0

基於那裏。例如供應商:1001有2個總價格30和23。總價格基於。如果在那裏列表相同。根據總價格以便宜的價格對其進行排序 – user475464 2012-02-16 07:36:08

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文件。

+0

分類支付有不同項目 – user475464 2012-02-16 07:38:02

+0

以上xslt按供應商排序,例如:1001,1001,1001,1002等,然後按總價格排序,例如:1001/23, 1001/24,1001/30,1002/26。這不是你想要的嗎? – papaiatis 2012-02-16 07:43:18

+0

1001/23和1001/30基於那裏相同。我們需要從列表中刪除1001/30。因爲它的價格很高 – user475464 2012-02-16 07:45:48

相關問題