<xsl:sort> with <option> </option> </xsl:sort>

时间:2012-07-27 05:38:08

标签: html xslt

我正在尝试使用HTML标记中的XML文件对值进行排序,我的代码如下所示:

<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文件中的shortname / value来排序。

1 个答案:

答案 0 :(得分:1)

xsl:value-of 不允许包含任何下一个xsl元素,例如 xsl:sort 。 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>