XSLT 1.0:条件For-Each

时间:2017-12-14 13:32:16

标签: xml xslt xslt-1.0

我给出了以下XML,带有随机数量的“Note”元素:

<Notes>
   <Note>
       <Size>400000</Size>
   </Note>
   <Note>
       <Size>200000</Size>
   </Note>
   <Note>
       <Size>500000</Size>
   </Note>
</Notes>

我想检查,如果其中一个Notes的大小元素等于或大于500000.如果是这种情况,我想调用主模板。如果没有,我想做点别的事。

我遇到的问题是:如果我在for-each循环中有if-then逻辑,那么我会多次调用模板。由于xslt中没有中断功能,我当时正在考虑使用一个变量,如果满足条件,我将设置为true,而如果设置为true,我将调用模板。但这不是我最害怕的最佳方法,您怎么看?

提前致谢。

1 个答案:

答案 0 :(得分:3)

不需要for-each循环。这样的事情会做你想做的事情:

<xsl:template match="Notes">
    <xsl:choose>
        <xsl:when test="number(descendant::Size/text()) &gt; 500000">
        <xsl:call-template name="process Note"/>
        </xsl:when>
        <xsl:otherwise>
        <xsl:call-template name="add attribute to Note"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>