[英]xsl sorting weird behavior
嘗試對輸入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"));
當我嘗試重現輸入文檔的問題時
<?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>
而是取決於有多少空白(很難從您的發布中分辨出來)。 但是字符串值“ Continents / Regions ABC”當然應該在“ Continents / Regions(energy)ABC”之前,因為“(”在“ A”之前。也許您忽略了“ ABC”是您的排序鍵的一部分?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.