将参数从jsp传递到xsl

时间:2012-05-19 11:59:39

标签: xml jsp xslt

我的下面的代码似乎合乎逻辑但我不知道为什么排序不适用于错误“变量或参数'sort'未定义。'”?我怀疑在xsl中声明param有什么问题。谁能指出我的错误?感谢

传递参数的java代码

String sort = "rating";
transformer.setParameter("sort", sort); /It will control the sort in xsl

xml文件

    <?xml version="1.0" ?>

<cd>
  <title>A Funk Odyssey</title>
  <artist>Jamiroquai</artist>

  <tracklist>
    <track id="1">
      <title>Feels So Good</title>
      <time>4:38</time>
      <rating>2</rating>
    </track>

    <track id="2">
      <title>Little L</title>
      <time>4:10</time>
      <rating>5</rating>
    </track>

    <track id="3">
      <title>You Give Me Something</title>
      <time>5:02</time>
      <rating>3</rating>
    </track>

    <track id="4">
      <title>Corner of the Earth</title>
      <time>3:57</time>
      <rating>1</rating>
    </track>
  </tracklist>


</cd>

这是我的xsl

            <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:param name="sort" select="title"/>
    <xsl:template match="/">
        <table border="1">
            <thead>
                <tr>
                    <th><a href="#">Title</a></th>
                    <th><a href="#">Time</a></th>
                    <th><a href="#">Rating</a></th>
                </tr>
            </thead>
            <tbody>
                <xsl:for-each select="cd/tracklist/track">
                    <xsl:sort select="$sort"/>
                    <tr>
                        <td><xsl:value-of select="title" /></td>
                        <td><xsl:value-of select="time" /></td>
                        <td><xsl:value-of select="rating" /></td>
                    </tr>
                </xsl:for-each>
            </tbody>
        </table>
    </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:4)

xsl:param声明中,您尝试默认为$sort,而xsl:param在评估<xsl:param name="sort"/> 时未定义。它看起来像是对自己的引用。

如果您不需要默认值,则只需将参数声明更改为:

<xsl:param name="sort" select="'title'"/>

或默认为字符串值:

<xsl:param name="sort">title</xsl:param>

xsl:sort

那就是说,我们只解决了参数声明问题。现在进行排序。 <xsl:sort select="*[name() = $sort]"/> 需要expression,它不会像预期的那样将字符串值转换为XPath。

这是解决方案Using Variables in <xsl:sort select=""/>

你基本上会做类似的事情:

{{1}}