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>

我的要求

When option is

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 回答