2013-01-02 33 views
0

我面臨着一個怪異的行爲而試圖理清我的輸入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")); 
+1

考慮向我們展示你想要的輸入結果。什麼是''好嗎?我沒有看到任何'rank'屬性你使用了哪種XSLT(2.0?)處理器?你是否嘗試過使用另一個來比較輸出? –

+0

它假設排名是空白的,如果它不存在,我也嘗試使用XAlan處理器,但是面臨同樣的問題 – Vic11

回答

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處理器撒克遜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> 
+0

這很奇怪,我也嘗試從命令行運行它,但是我可以用JRE 6和7重現它。這是我使用的命令'java -jar C:\ QA \ Selenium Tutorial \ lib \ saxon9he .ja r TestXML.xml transform.xslt -0:output.xml' – Vic11

0

而是取決於有多少空白(這很難從你的發佈)。但字符串值「Continents/Regions ABC」肯定應該在「Continents/Regions(energy)ABC」之前,因爲「(」在A之前。或許你忽略了「ABC」是你的排序鍵的一部分嗎?