0

我对 xslt 很陌生

我有以下 xslt 代码段(为了清楚起见,使用伪代码):

<xsl:for-each select="fields/field">
  <xsl:if test="field=someThing">
    <div>
      <!--some content output-->
      <!--here by doing-->
      <!--some complex stuff-->
    </div>
  </xsl:if>
</xsl:for-each>

但是根据循环中的字段值,我可以选择在关闭 div 之前做一些其他的事情。

所以(带着闪亮的新 xsl 书)我想我可以做这样的事情:

<xsl:for-each select="fields/field">
  <xsl:if test="field=someThing">
    <div>
      <!--some content output-->
      <!--here by doing-->
      <!--some complex stuff-->
    <xsl:choose>
      <xsl:when test="field=someThingSpecific">
        <div>
        <!--process some additional-->
        <!--stuff here-->
        </div>
        <!--then close div-->
        </div>
      </xsl:when>
      <xsl:otherwise>
        <!--nothing to do here-->
        <!--just close the div-->
        </div>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:if>
</xsl:for-each>

但它会爆炸。

显然是因为关闭 div 已移入条件 xsl:choose 块

所以真的有两个问题:

为什么它不能按原样工作?

我怎样才能实现我的目标?

4

1 回答 1

0

因为您的 XSLT 格式不正确,所以它爆炸了。当你打开第一个div外面的时候xsl:choose,你必须把它关在外面xsl:choose

另外,如果你不需要在你的 中做任何事情xsl:otherwise,只需做另一个xsl:if

<xsl:for-each select="fields/field">
    <xsl:if test="field=someThing">
        <div>
            <!--some content output-->
            <!--here by doing-->
            <!--some complex stuff-->
            <xsl:if test="field=someThingSpecific">
                <div>
                    <!--process some additional-->
                    <!--stuff here-->
                </div>
            </xsl:if>
            <!--then close div-->
        </div>
    </xsl:if>
</xsl:for-each>
于 2012-08-06T01:21:19.883 回答