2013-03-20 156 views
-1

我有这样自定义XML排序顺序?

<tests> 
    <test> 
     <categoryname>A</categoryname> 
     <region>EU</region> 
    </test> 

    <test> 
     <categoryname>B</categoryname> 
     <region>EU</region> 
    </test> 

    <test> 
     <categoryname>C</categoryname> 
     <region>USA</region> 
    </test> 
    <test> 
     <categoryname>C</categoryname> 
     <region>EU</region> 
    </test> 
</tests> 

一个XML文件,它按字母顺序排序,并像显示:

A 
B 
C 

但我想用我的自定义排序喜欢看到它:

C 
A 
B 

我看到过类似的问题,并为我提供了答案(xsl代码),但不幸的是没有帮助,如果你能帮助我,我会很高兴! 我可以添加额外的属性/标签/值等

回答

1

这个怎么样:

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

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

    <xsl:template match="/*"> 
    <xsl:copy> 
     <xsl:apply-templates select="test"> 
     <xsl:sort select="string-length(substring-before('|C|A|B|', 
                 concat('|', categoryname, '|') 
                 ))" 
        data-type="number"/> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

当适用于您的样品输入,结果是:

<tests> 
    <test> 
    <categoryname>C</categoryname> 
    <region>USA</region> 
    </test> 
    <test> 
    <categoryname>C</categoryname> 
    <region>EU</region> 
    </test> 
    <test> 
    <categoryname>A</categoryname> 
    <region>EU</region> 
    </test> 
    <test> 
    <categoryname>B</categoryname> 
    <region>EU</region> 
    </test> 
</tests> 
+0

我试着在http您的解决方案: //www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=tryxsl_sort,它的工作原理,但不是在我的,因为我的文件被馈送到另一个大的报告文件,这是在BIRT设计的许多功能和650行代码:(但是,谢谢你! – Anarkie 2013-03-20 16:29:12

+0

那么,你能向我们展示将执行分类的XSLT部分?应该可以修改它以使用上述方法。 – JLRishe 2013-03-20 16:42:11

+0

没有任何其他XSLT,我添加的唯一一个是你的,我试图将它添加到大的XML文件,但没有被接受,显然我需要更多的练习与XML ... 前3行:'< ?xml version =“1.0”encoding =“UTF-8”?> Eclipse BIRT Designer版本2.6.0.v20100531内部版本< 2.6.0.v20100609-1613>' – Anarkie 2013-03-20 17:08:07