自定义XML排序顺序?
我有一个xml文件,比如自定义XML排序顺序?,xml,sorting,xslt,Xml,Sorting,Xslt,我有一个xml文件,比如 <tests> <test> <categoryname>A</categoryname> <region>EU</region> </test> <test> <categoryname>B</categoryname> <region>EU</
<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>
但我希望在自定义排序时看到它,如:
C
A
B
我见过类似的问题,并为我应用了给定的答案(xsl代码),但不幸的是没有帮助,如果您能帮助我,我将非常高兴!
我可以添加额外的属性/标签/值等。这是怎么回事:
<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>
C
美国
C
欧盟
A.
欧盟
B
欧盟
我尝试了您的解决方案,但它在我的解决方案上有效,因为我的文件正在被传送到另一个大报告文件,该文件是用BIRT设计的,具有许多功能和650行代码:(尽管如此,谢谢!好的,你能告诉我们你的XSLT中执行排序的部分吗?应该可以使用上述方法对其进行修改。没有任何其他XSLT,我添加的唯一XSLT是你的,我尝试将其添加到大xml文件中,但没有被接受,显然我需要更多的xml实践…f第一行3行:EclipseBirt Designer版本2.6.0.v20100531 Build 2.6.0.v20100609-1613>
从这段简短的代码片段中,我可以看出它使用了一个名称空间,这是一个重要的因素,但我认为这还不足以帮助您。在您上面的问题文本中,您能否提供足够的源XML来说明这一点要排序的项目与包含的文档相对的位置,以及应该使用哪些值进行排序?这是否有帮助?这就是大xml文件如何连接到我在上面创建和呈现的文件;tests.xml
我应该向这个tests.xml添加什么,以便显示categorynames按照我喜欢的顺序?
<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>