這是因爲$formslist/*
選擇forms
元素進行排序。
你可以聲明$ FORMLIST爲:
<xsl:variable name="formlist" as="element()">
<forms>
<FORM form_name="form1" print_seq="1200"/>
<FORM form_name="form2" print_seq="1500"/>
<FORM form_name="form3" print_seq="9000"/>
<FORM form_name="form4" print_seq="5500"/>
</forms>
</xsl:variable>
但是你將失去在副本中forms
元素。
其他解決方案將與排序的身份規則。這個樣式表:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="formlist">
<forms>
<FORM form_name="form1" print_seq="1200"/>
<FORM form_name="form2" print_seq="1500"/>
<FORM form_name="form3" print_seq="9000"/>
<FORM form_name="form4" print_seq="5500"/>
</forms>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="$formlist" mode="copy"/>
</xsl:template>
<xsl:template match="node()|@*" mode="copy">
<xsl:copy>
<xsl:apply-templates select="node()|@*" mode="copy">
<xsl:sort select="self::FORM/@print_seq"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
輸出:
<forms>
<FORM form_name="form1" print_seq="1200"/>
<FORM form_name="form2" print_seq="1500"/>
<FORM form_name="form4" print_seq="5500"/>
<FORM form_name="form3" print_seq="9000"/>
</forms>
好問題,+1。請參閱我的答案,詳細討論提供的XSLT代碼中的問題以及簡短易用的解決方案。 :) – 2010-10-19 22:59:03