我给出了以下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,我将调用模板。但这不是我最害怕的最佳方法,您怎么看?
提前致谢。
答案 0 :(得分:3)
不需要for-each循环。这样的事情会做你想做的事情:
<xsl:template match="Notes">
<xsl:choose>
<xsl:when test="number(descendant::Size/text()) > 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>