2017-08-29 63 views
1

我想在變量聲明中使用xsl:perform-sort,但它似乎沒有效果。可以在變量聲明中執行-order嗎?

輸入XML:

<root> 
    <section> 
     <seq>2</seq> 
    </section> 
    <section> 
     <seq>1</seq> 
    </section> 
</root> 

變換:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/*"> 

     <xsl:comment>using perform-sort</xsl:comment> 
     <xsl:variable name="vSections" as="element() *"> 
      <xsl:perform-sort select="section"> 
       <xsl:sort data-type="number" select="seq" /> 
      </xsl:perform-sort> 
     </xsl:variable> 

     <xsl:sequence select="$vSections/seq" /> 

     <xsl:comment>using for-each</xsl:comment> 
     <xsl:for-each select="section"> 
      <xsl:sort data-type="number" select="seq" /> 
      <xsl:sequence select="seq" /> 
     </xsl:for-each> 

    </xsl:template> 

</xsl:stylesheet> 

輸出:

<!--using perform-sort--><seq>2</seq><seq>1</seq><!--using for-each--><seq>1</seq><seq>2</seq> 

我期待xsl:perform-sortvSections變量內包含的section元素進行排序。

我想弄清楚我在做什麼錯誤xsl:perform-sort

+0

有趣。注意如果你執行''會發生什麼。 –

回答

1

<xsl:sequence select="$vSections/seq" />您使用了一步/seq這種種的文檔順序(https://www.w3.org/TR/xpath-31/#id-path-operator),所以你需要<xsl:sequence select="$vSections!seq" />(我認爲是的XPath 3.0)或<xsl:sequence select="for $s in $vSections return $s/seq" />

+1

在2.0中,我想你可能必須做''來避免排序文件順序。 –

相關問題