1

以下のコードは論理的に見えますが、「変数またはパラメーター '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>
4

1 に答える 1

4

あなたの宣言では、評価時に定義されていないxsl:paramデフォルトにしようとしています。それ自体への参照のように見えます。$sortxsl:param

デフォルトが必要ない場合は、パラメータ宣言を次のように変更してください。

<xsl:param name="sort"/>

またはデフォルトの文字列値:

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

また

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

とはいえ、パラメータ宣言の問題に対処しただけです。では仕分けに入ります。xsl:sortが必要です。期待どおりに文字列値を XPath に変換しません。

ここに解決策があります: Using Variables in<xsl:sort select=""/> .

あなたは基本的に次のようなことをします:

<xsl:sort select="*[name() = $sort]"/>
于 2012-05-19T12:08:52.940 に答える