2012-07-27 91 views
0

我想在我的代碼的HTML標記從XML文件中的值進行排序是這樣的:<xsl:sort>與<option>

<option value="{id/value}"> 

    <xsl:value-of select="short_name/value" > 
    <xsl:sort select="short_name/value"/> 
    </xsl:value-of> 

</option> 

在哪裏我要在這裏把標籤?我只得到一個java.io.IOException:com.caucho.xsl.XslParseException。 應該按照XML文件中的短名稱/值進行排序。

+0

爲了真正幫助回答你的問題,如果你能夠顯示你的XML輸入以及你的XML輸出,這將會很有幫助。非常感謝! – 2012-07-27 06:18:56

回答

1

的xsl:值的-不允許包含任何下一個XSL元素,如的xsl:排序。 sort命令只適用於xsl:for-eachxsl: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> 
+0

乾杯的人,這是訣竅! – Alex 2012-07-27 08:11:53

+0

@Tim C.徘徊。你究竟是怎麼從一小段不正確的代碼中找出OP想要達到的目標? – 2012-07-27 10:27:25