如何在XSLT中使用条件语句

k

我想选择包含“抽象”或“主体”标签的内容,但是我使用下面的代码从XSLT的两个标签中获取内容。如果删除“ xsl:if”,则对输出没有影响。

<xsl:template match="document">
<xsl:for-each select="./child::node()">
  <xsl:choose>        
    <xsl:when test="name() = 'abstract'">
      <xsl:call-template name="abstract"/>
    </xsl:when>
    <xsl:otherwise>
    <xsl:if test="name() = 'body'">
        <xsl:call-template name="body"/>
    </xsl:if>
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each> 

我必须在上面的代码中进行哪些更改?

马修

将条件词移出for-each

<xsl:template match="document">
    <xsl:choose>
        <xsl:when test="abstract">
            <xsl:for-each select="abstract">
                <xsl:call-template name="abstract"/>
            </xsl:for-each>
        </xsl:when>
        <xsl:otherwise>
            <xsl:for-each select="body">
                <xsl:call-template name="body"/>
            </xsl:for-each>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

我们首先测试是否有任何抽象元素。如果是这样,我们遍历所有抽象元素并调用适当的模板。

否则,我们将遍历body元素并调用适当的模板。

您现有的xsl遍历所有节点,并为每个节点检查节点名称,然后应用适当的模板。测试适用于各个节点。没有检查文档内容。

此处的区别在于,我们首先测试文档中存在哪些节点,然后仅在我们感兴趣的节点上循环。

替代方法

假设名为abstract的模板仅处理抽象节点,而名为body的模板仅处理主体节点,则使用匹配模板代替命名模板更为常见,这将使我们避免for-each循环

<xsl:template match="document">
    <xsl:choose>
        <xsl:when test="abstract">
            <xsl:apply-templates select="abstract"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:apply-templates select="body"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template match="abstract">
    <!-- Process abstract node here -->
</xsl:template>

<xsl:template match="body">
    <!-- Process body node here -->
</xsl:template>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在XSLT中使用<![CDATA []]>?

来自分类Dev

如何在Eclipse中使用JavaDocs显示条件返回语句?

来自分类Dev

如何在Eclipse中使用JavaDocs显示条件返回语句?

来自分类Dev

如何在Scheme中使用“条件”条件

来自分类Dev

如何在XSLT中使用内联条件式(如果有的话)?

来自分类Dev

如何在SQL case语句中使用> =条件?

来自分类Dev

如何在“链接的”方法调用中使用条件语句?

来自分类Dev

如何在PowerShell中使用条件语句重命名文件

来自分类Dev

如何在条件语句中使用random.choices变量

来自分类Dev

如何在XSLT中使用求和

来自分类Dev

如何在条件语句中使用javascript new Date()对象?

来自分类Dev

如何在Django模板的条件语句中使用字典中的值进行操作

来自分类Dev

如何在vue.js中使用条件语句:attr

来自分类Dev

如何在SAS的'if then else'语句中使用null作为条件?

来自分类Dev

如何在swift方法中使用条件语句

来自分类Dev

如何在VB.NET中使用一组变量创建条件语句

来自分类Dev

如何在SQL UPDATE语句中使用IF条件?

来自分类Dev

如何在XSLT中使用内联条件式(如果有的话)?

来自分类Dev

如何在xslt中使用if逻辑

来自分类Dev

如何在bash case语句中使用条件构造?

来自分类Dev

如何在Windows批处理中使用多条语句处理条件而不需要goto或call

来自分类Dev

如何在管道命令中使用条件语句?

来自分类Dev

如何在Angular JS中使用条件语句

来自分类Dev

如何在xslt中使用contains?

来自分类Dev

如何在TOSCA中使用循环语句和条件语句?

来自分类Dev

如何在条件语句中使用液体标签

来自分类Dev

D3 - 如何在输入中使用条件语句

来自分类Dev

如何在javascript中使用包含“and”的条件进行if语句

来自分类Dev

如何在 case 语句的 when 条件中使用变量

Related 相关文章

  1. 1

    如何在XSLT中使用<![CDATA []]>?

  2. 2

    如何在Eclipse中使用JavaDocs显示条件返回语句?

  3. 3

    如何在Eclipse中使用JavaDocs显示条件返回语句?

  4. 4

    如何在Scheme中使用“条件”条件

  5. 5

    如何在XSLT中使用内联条件式(如果有的话)?

  6. 6

    如何在SQL case语句中使用> =条件?

  7. 7

    如何在“链接的”方法调用中使用条件语句?

  8. 8

    如何在PowerShell中使用条件语句重命名文件

  9. 9

    如何在条件语句中使用random.choices变量

  10. 10

    如何在XSLT中使用求和

  11. 11

    如何在条件语句中使用javascript new Date()对象?

  12. 12

    如何在Django模板的条件语句中使用字典中的值进行操作

  13. 13

    如何在vue.js中使用条件语句:attr

  14. 14

    如何在SAS的'if then else'语句中使用null作为条件?

  15. 15

    如何在swift方法中使用条件语句

  16. 16

    如何在VB.NET中使用一组变量创建条件语句

  17. 17

    如何在SQL UPDATE语句中使用IF条件?

  18. 18

    如何在XSLT中使用内联条件式(如果有的话)?

  19. 19

    如何在xslt中使用if逻辑

  20. 20

    如何在bash case语句中使用条件构造?

  21. 21

    如何在Windows批处理中使用多条语句处理条件而不需要goto或call

  22. 22

    如何在管道命令中使用条件语句?

  23. 23

    如何在Angular JS中使用条件语句

  24. 24

    如何在xslt中使用contains?

  25. 25

    如何在TOSCA中使用循环语句和条件语句?

  26. 26

    如何在条件语句中使用液体标签

  27. 27

    D3 - 如何在输入中使用条件语句

  28. 28

    如何在javascript中使用包含“and”的条件进行if语句

  29. 29

    如何在 case 语句的 when 条件中使用变量

热门标签

归档