【问题标题】:XSLT 1.0: Conditional For-EachXSLT 1.0:有条件的 For-Each
【发布时间】:2017-12-14 13:32:15
【问题描述】:

我给出了以下 XML,其中包含随机数量的“Note”元素:

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

我想检查这些注释之一的大小元素是否等于或大于 500000。如果是这种情况,我想调用主模板。如果没有,我想做点别的。

我遇到的问题是:如果我在 for-each 循环中有 if-then 逻辑,那么我会多次调用模板。由于 xslt 中没有中断功能,因此我当时正在考虑使用一个变量,如果满足条件,我将设置为 true,如果设置为 true,则在 for-each 之后我将调用模板。但这并不是我真正担心的最佳方法,你觉得呢?

提前致谢。

【问题讨论】:

  • 如果其中一个note/size超过5000,我想调用主模板,如果没有一个note/size超过5000,我什么都不会调用,只是设置一个属性
  • 是的,有一个根元素,我已将其添加到原始帖子中

标签: xml xslt xslt-1.0


【解决方案1】:

不需要 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>

【讨论】:

  • @CoffeeCups:如果有帮助,请accept这个答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多