我面臨着一個怪異的行爲而試圖理清我的輸入XML:XSL排序怪異的行爲
我的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"));
考慮向我們展示你想要的輸入結果。什麼是' '好嗎?我沒有看到任何'rank'屬性你使用了哪種XSLT(2.0?)處理器?你是否嘗試過使用另一個來比較輸出? –
它假設排名是空白的,如果它不存在,我也嘗試使用XAlan處理器,但是面臨同樣的問題 – Vic11