簡體   English   中英

XSL排序奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM