2012-08-06 56 views
0

我是很新的XSLTXSLT嵌套條件 - 如何做到這一點

我有以下XSLT片段(pseudo'ed爲清楚起見):

<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:選擇阻止

所以2個問題真的:

爲什麼犯規它當作是工作的?

我該如何實現我的目標?

回答

0

這是因爲你的XSLT格式不正確而炸燬的。當您打開xsl:choose之外的第一個div時,您必須在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> 
+0

啊,我剛睡醒了「durrhhh時刻」。謝謝澄清 – bule 2012-08-06 07:10:50