2011-10-15 35 views
3

的值排序的节点是否有可能进行排序以xsl下面的XML(在组排序子组通过日期为mm/dd/yyyy格式):的xsl:由子节点

<Data version="2.0"> 
    <Group> 
     <SubGroup>   
      <Date>11/14/2011</Date> 
     </SubGroup> 
     <SubGroup>   
      <Date>10/25/2011</Date> 
     </SubGroup> 
    </Group> 
    <Group> 
     <SubGroup> 
      <Date>01/14/2008</Date> 
     </SubGroup> 
     <SubGroup>   
      <Date>11/01/2005</Date> 
     </SubGroup> 
    </Group> 
</Data> 

到这一个:

<Data version="2.0"> 
    <Group> 
     <SubGroup> 
      <Date>10/25/2011</Date> 
     </SubGroup> 
     <SubGroup>   
      <Date>11/14/2011</Date> 
     </SubGroup> 
    </Group> 
    <Group> 
     <SubGroup> 
      <Date>11/01/2005</Date> 
     </SubGroup> 
     <SubGroup>   
      <Date>01/14/2008</Date> 
     </SubGroup> 
    </Group> 
</Data> 

正如我认为有两个任务:1)按内部节点中的值排序SubGroups 2)以特殊格式按日期排序。如果您知道如何解决(1)按整数值而不是日期排序的问题,请发布答案。

回答

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

    <xsl:template match="Group"> 
    <xsl:copy> 
     <xsl:apply-templates select="SubGroup"> 
     <xsl:sort select="concat(
        substring(Date, 7, 4), 
        substring(Date, 1, 2), 
        substring(Date, 4, 2) 
       )"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
+0

它的工作原理篦,除了与XML标准化的小问题:XSL转换后是一条线。有没有像原来的XML一样保留换行符的能力? – purum

+0

@purum,尝试在开始处添加''。 –

+0

哇,非常感谢! – purum