使用递归嵌套模板在 XSLT 中进行转换 [英] Transformation in XSLT with Recursive Nested Templates

查看:60
本文介绍了使用递归嵌套模板在 XSLT 中进行转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个 Entry Input XML

I have this Entry Input XML

<BusinessInteractionTypes>
   <BusinessInteractionType>
     <TypeId>123</TypeId>
     <Name>Foo</Name>
     <Description>XSLT</Description>
   </BusinessInteractionType>
   ...a lot BusinessInteractionType Elements
</BusinessInteractionTypes>

但是有很多转换(到 SOA 案例),我需要使用 XSLT 将此输入转换为:

But a have a lot of transformation (to SOA case), I need Transform this input using XSLT to:

<businessInteractionTypes>
  <businessInteractionType>
   <BusinessInteractionType>   <!-- Just first input node -->
     <TypeId/>
   </BusinessInteractionType>
  </businessInteractionType>
  <businessInteractionTypeHas> <!-- Recursive interaction began -->
    <businessInteractionType>
      <BusinessInteractionType>
       <TypeId />
      </BusinessInteractionType>

      <businessInteractionTypeHas>
       ... recursive
    </businessInteractionType>
  </businessInteractionTypeHas>
</businessInteractionTypes>

推荐答案

Srs,我解决了这个问题... 按照谢谢大家

Srs, I fix the issue... follow Thanks all

<?xml version="1.0" encoding="UTF-8"?>

<xsl:template match="cus:BusinessInteractionType">
    <xsl:call-template name="Master">
      <xsl:with-param name="nodeD" select="bus1:BusinessInteractionType"/>
  </xsl:call-template>
</xsl:template>

<xsl:template name="Master">
    <xsl:param name="nodeD" select="bus1:BusinessInteractionType"/>

    <cas:businessInteractionTypes>
        <cas:businessInteractionType>
            <xsl:if test="bus1:BusinessInteractionType[position() = 1]">
                <bus3:BusinessInteractionType>
                    <bus1:TypeId>
                        <xsl:value-of select="//bus1:TypeId"/>
                    </bus1:TypeId>
                </bus3:BusinessInteractionType>
            </xsl:if>
            <xsl:call-template name="MasterNested">
                <xsl:with-param name="current_node" select="bus1:BusinessInteractionType[position()>1]"/>
            </xsl:call-template>
        </cas:businessInteractionType>    
    </cas:businessInteractionTypes>
</xsl:template>

<xsl:template name="MasterNested">

    <xsl:param name="current_node" select="bus1:BusinessInteractionType"/>

    <xsl:if test="$current_node">
        <cas:businessInteractionTypeHas>
            <cas:businessInteractionType>
                <bus3:TypeId>
                    <xsl:value-of select="$current_node//bus1:TypeId"/>
                </bus3:TypeId>
                <bus3:Name>
                    <xsl:value-of select="$current_node//bus1:Name"/>
                </bus3:Name>
                <bus3:Description>
                    <xsl:value-of select="$current_node//bus1:Description"/>
                </bus3:Description>
            </cas:businessInteractionType>
            <xsl:call-template name="MasterNested">
                <xsl:with-param name="current_node" select="$current_node/following-sibling::node()"/>
            </xsl:call-template>
        </cas:businessInteractionTypeHas>
    </xsl:if>
</xsl:template>

这篇关于使用递归嵌套模板在 XSLT 中进行转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆