的的xsl:值的-不允許包含任何下一個XSL元素,如的xsl:排序。 sort命令只適用於xsl:for-each或xsl:apply-templates。
<xsl:for-each select="short_name/value" >
<xsl:sort select="."/>
<xsl:value-of select="." />
</xsl:for-each>
或者,因爲它是最好使用模板過的for-each,你可以這樣做
<xsl:apply-templates select="short_name/value">
<xsl:sort select="."/>
</xsl:apply-templates>
,除非你想你不會需要一個匹配模板爲值元素輸出除文本值之外的任何內容,因爲在這種情況下,XSLT處理器的默認行爲將輸出文本。
需要注意的一件事是,在您的示例中,您只能輸出一個選項元素。你確定你不想要多個,每個id或short_name一個。這取決於你的XML輸入採樣,當然,但假設你有這樣的XML
<people>
<person><id><value>3</value></id><short_name><value>C</value></short_name></person>
<person><id><value>1</value></id><short_name><value>A</value></short_name></person>
<person><id><value>2</value></id><short_name><value>B</value></short_name></person>
</people>
然後,如果您使用以下XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="people">
<xsl:apply-templates select="person">
<xsl:sort select="short_name/value"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="person">
<option value="{id/value}">
<xsl:value-of select="short_name/value"/>
</option>
</xsl:template>
</xsl:stylesheet>
再下面是輸出
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
爲了真正幫助回答你的問題,如果你能夠顯示你的XML輸入以及你的XML輸出,這將會很有幫助。非常感謝! – 2012-07-27 06:18:56