1

私のXMLファイル

<option>
<options OPT_CD="LAYOUT_SORTBY1_ORDER" OPT_VALUE="DESC"/>
</option>
<data>
<details name="firstName1" address="lastName1" sortby1="firstName"/>
<details name="firstName2" address="lastName2" sortby1="firstName"/>
<details name="firstName3" address="lastName3" sortby1="firstName"/>
</data>

私のxsltファイル

<xsl:choose>
     <xsl:when test="option/options[@OPT_CD='LAYOUT_SORTBY1_ORDER']/@OPT_VALUE='DESC'">
             <xsl:apply-templates select="/data/details">
                  <xsl:sort select="./@sortby1" order="descending" />
             </xsl:apply-templates>
      </xsl:when>
      <xsl:otherwise>
           <xsl:apply-templates select="/data/details">
                <xsl:sort select="./@sortby1" order="ascending" />
           </xsl:apply-templates>
      </xsl:otherwise>
</xsl:choose>

私の要件

オプションの場合

OPT_CD="LAYOUT_SORTBY1_ORDER" and OPT_VALUE="DESC"

選択する必要があります

<xsl:sort select="./@sortby1" order="descending" />

そうしないと

<xsl:sort select="./@sortby1" order="ascending" />

問題: エラー メッセージが表示されず、条件付きでデータが降順で表示されません。私は間違いを犯しましたか?提案や解決策をありがとう。

4

2 に答える 2

1

タイプミスでない限り、名前が間違っています

options/option[] であってはなりません。

オプション/オプション

于 2013-08-12T14:55:55.517 に答える
1

変数と属性値テンプレートを使用できます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:key name="opt" match="@OPT_VALUE" use="../@OPT_CD" />

  <xsl:variable name="sortOrder">
    <xsl:choose>
       <xsl:when test="key('opt', 'LAYOUT_SORTBY1_ORDER') = 'DESC'">descending</xsl:when>
       <xsl:otherwise>ascending</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <xsl:template match="/xml">
    <xsl:apply-templates select="data/details">
      <xsl:sort select="@sortby1" order="{$sortOrder}" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="details">
    <p><xsl:value-of select="@name" /></p>
  </xsl:template>

</xsl:stylesheet>

<xsl:key>便利なオプション検索のために注意してください。

...に適用される場合

<xml>
  <option>
    <options OPT_CD="LAYOUT_SORTBY1_ORDER" OPT_VALUE="DESC"/>
  </option>
  <data>
    <details name="firstName1" address="lastName1" sortby1="firstName1"/>
    <details name="firstName2" address="lastName2" sortby1="firstName2"/>
    <details name="firstName3" address="lastName3" sortby1="firstName3"/>
  </data>
</xml>

与える

<p>firstName3</p><p>firstName2</p><p>firstName1</p>
于 2013-08-12T15:20:18.723 に答える