2017-02-10 51 views
0

是否可以通过将段的最后一个实例移动到消息的最后部分来重新排列xml段。请参考下面的样品:使用xslt以日期为键来重新排列节点

原始结构:

<Header> 
<Field>20170201</Field> 
</Header> 
<Header> 
<Field>20170203</Field> 
</Header> 
<Line> 
<Field>20170202</Field> 
</Line> 

希望的输出:

<Header> 
<Field>20170201</Field> 
</Header> 
<Line> 
<Field>20170202</Field> 
</Line> 
<Header> 
<Field>20170203</Field> 
</Header> 

在上面的示例中,第二实例(或报头的最后一个实例)中的溶液的线节点之后移动。

+0

Google'xslt sort'。 - P.S.你有什么是数字,而不是日期(虽然他们确实代表日期)。 XSLT 1.0不知道如何按日期排序,但按照您拥有的数字排序会产生相同的效果。 –

+0

好吧,先生,迈克尔,我猜我使用的日期格式要复杂得多。 YYYY-MM-DDTHH:mm:ss.xxxxxZ。你没有使用日期是正确的。我可以改为在最后一段之后移动最后一个实例吗? –

+0

这种格式也是可排序的,使用“text”作为“数据类型”。 –

回答

0

感谢迈克尔的解决方案! 确实很简单。再次感谢!

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="MainNode"> 
    <xsl:copy> 
     <xsl:apply-templates> 
     <xsl:sort data-type="text" select="Field"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet>