我在尝试对输入XML进行排序时遇到了一种奇怪的行为:
我的XSL:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- <xsl:strip-space elements="*"/> -->
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="name">
<xsl:sort select="@rank" data-type="number"/>
<xsl:sort collation = "http://www.w3.org/2005/xpath-functions/collation/codepoint"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="name">
<name rank="{@rank}">
<xsl:copy-of select="text()"/>
<xsl:apply-templates select="name">
<xsl:sort select="@rank" data-type="number"/>
<xsl:sort collation = "http://www.w3.org/2005/xpath-functions/collation/codepoint" />
</xsl:apply-templates>
</name>
</xsl:template>
</xsl:stylesheet>
当我的输入XML格式为:
时<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name rank="">Continents / Regions (energy)</name>
<name rank="">Continents / Regions</name>
</Sources>
它正确排序为:
<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name rank="">Continents / Regions</name>
<name rank="">Continents / Regions (energy)</name>
</Sources>
但是,当输入为:
<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name rank="">Continents / Regions (energy)
<name rank="">ABC</name>
</name>
<name rank="">Continents / Regions
<name rank="">ABC</name>
</name>
</Sources>
输出不正确:
<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name rank="">Continents / Regions (energy)
<name rank="">ABC</name>
</name>
<name rank="">Continents / Regions
<name rank="">ABC</name>
</name>
</Sources>
如果有人能指出我应该关注的内容,我将不胜感激。提前谢谢!
编辑:正在使用的XSLT处理器是Saxon HE 9.4。这是我的Java代码。
tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
Transformer transformer = tFactory.newTransformer(new StreamSource(RCSTestDriver.TestDataPath + "/transform.xslt"));
答案 0 :(得分:0)
当我尝试使用
输入文档重现问题时<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name>Continents / Regions (energy)
<name>ABC</name>
</name>
<name>Continents / Regions
<name>ABC</name>
</name>
</Sources>
发布的样式表和XSLT 2.0处理器Saxon 9.4 HE从命令行运行我无法重现它,而是我得到了输出
<?xml version="1.0" encoding="UTF-8"?>
<Sources>
<name rank="">Continents / Regions
<name rank="">ABC</name>
</name>
<name rank="">Continents / Regions (energy)
<name rank="">ABC</name>
</name>
</Sources>
答案 1 :(得分:0)
这取决于有多少空白(这很难说明你的帖子)。但字符串值“Continents / Regions ABC”肯定应位于“Continents / Regions(energy)ABC”之前,因为“(”在“A”之前。也许您忽略了“ABC”是您的排序键的一部分?