2015-10-26 37 views
1

我有问题得到一个非常简单的XSL:排序工作。我确信解决方案是微不足道的,但从这里和其他资源类似的问题的例子没有得到我的解决方案。XSLT为每个与排序不按预期工作

示例XML

<Package version="1.0"> 
<Payload> 
<Filenames> 
<Filename>MDP_939529_0_20151006104742_2.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_3.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_1.tif</Filename> 
</Filenames> 
<DocumentType>FOO</DocumentType> 
<Timestamp>2015-10-26T15:42:04.902-07:00</Timestamp> 
<PayloadContext> 
<Item name="Company ID">0</Item> 
<Item name="Office ID">0</Item> 
</PayloadContext> 
</Payload> 
</Package> 

我的XSLT是

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

    <xsl:output 
     method="xml" 
     version="1.0" 
     encoding="UTF-8" 
     indent="yes" 
     omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 

    <!-- global template to copy everything that doesn't match the other templates --> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/MDXPackage/Payload/Filenames"> 
    <Filenames> 
     <xsl:for-each select="//MDXPackage/Payload/Filenames/Filename"> 
     <xsl:sort select="Filename" data-type="text" /> 
      <Filename> 
       <xsl:value-of select="//MDXPackage/Payload/Filenames/Filename"/> 
      </Filename> 
     </xsl:for-each> 
    </Filenames> 
    </xsl:template> 
</xsl:stylesheet> 

我的结果中包含

<Filenames> 
<Filename>MDP_939529_0_20151006104742_2.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_2.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_2.tif</Filename> 
</Filenames> 

,而不是期望

<Filenames> 
<Filename>MDP_939529_0_20151006104742_1.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_2.tif</Filename> 
<Filename>MDP_939529_0_20151006104742_3.tif</Filename> 
</Filenames> 

在此先感谢

大卫

回答

1

更改到这一点,就会产生期望的结果。

<xsl:template match="Filenames"> 
    <xsl:copy> 
    <xsl:for-each select="Filename"> 
     <xsl:sort select="." data-type="text" /> 
     <xsl:copy-of select="."/> 
    </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 
+1

谢谢。完美的作品 – DLoysen

+0

@DLoysen,不客气 –