0

我正在尝试使用 对 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 文件中的短名称/值排序。

4

1 回答 1

1

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

除非您想要输出文本值以外的任何内容,否则您不需要为value元素匹配模板,因为在这种情况下,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>
于 2012-07-27T06:18:13.840 回答