2011-10-14 144 views
1

我正處於XSL的學習階段。根據日期的不同,我面臨着需要對元素進行排序的問題。輸入XML包含列表。列表中的每個對象都包含一個複雜對象。我需要根據複雜對象中的元素對列表進行排序。 E.g <list> <object> <date>2011-10-05<date/> </object> </list> <list> <object> <date>2011-10-04<date/> </object> </list> <list> <object> <date>2011-10-08<date/> </object>
</list>
使用XSL排序列表

我需要根據日期對xml進行排序。有沒有可能做?請幫忙。

回答

0

是的,你可以。

您可以使用多個xsl:sort元素,以便用多個條件對選擇進行排序。

下1.0 XSLT轉換:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <root> 
     <xsl:for-each select="root/list"> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 1, 4)"/> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 6, 2)"/> 
     <xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date),9, 2)"/> 
     <xsl:copy-of select="."/> 
     </xsl:for-each> 
    </root> 
    </xsl:template> 
</xsl:stylesheet> 

當應用到我想出了根據自己生病形成輸入.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <list> 
    <object> 
     <date> 
     2011-10-05 
     </date> 
    </object> 
    </list> 
    <list> 
    <object> 
     <date> 
     2011-10-04 
     </date> 
    </object> 
    </list> 
    <list> 
    <object> 
     <date> 
     2011-10-08 
     </date> 
    </object> 
    </list> 
</root> 

將產生以下結果:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <list> 
     <object> 
     <date> 
     2011-10-04 
     </date> 
     </object> 
    </list> 
    <list> 
     <object> 
     <date> 
     2011-10-05 
     </date> 
     </object> 
    </list> 
    <list> 
     <object> 
     <date> 
     2011-10-08 
     </date> 
     </object> 
    </list> 
</root> 

我首先根據年份,然後在月份和最後一天排序。自然你可以改變排序順序以適應你的需求。

我希望我能解決你的問題:)