我正在尝试使用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来排序。
答案 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>