• BizTalk 开发小技巧Custom XSLT复杂mapping的简单实现


    BizTalk最强大的就是消息的订阅/发布和消息转换(transform-mapping),与不同的业务系统做对接势必会用到mapping这个强大的工具。BizTalk提供了非常丰富的mapping函数(Functoids),满足你对业务的不同需要,实在不行可以用万能的Scripting这个工具。

    但是处理XML消息的真正胸器是XPath和XSLT如果你精通这2种语言那么对于开发XML将事半功倍,当然也是必须要掌握的。

    下面用2个小例子说明一下如何在BizTalk mapping过程中使用自定义的XSLT脚本实现复杂mapping。其实通过BizTalk Mapper编辑器拉线的mapping本质也是生产一个XSLT脚本。

    第一个例子比较常见

    多行记录mapping成一行多列,需要使用2个函数,一个是Equal,一个是Value Mapping,具体功能就不说了

    源记录

    <ns0:ComplexSource xmlns:ns0="http://XSLT_Mapping.ComplexSource">

        <Item>

         <Code>FistName</Code>

         <Value>Steve</Value>

         </Item>

         <Item>

         <Code>LastName</Code>

         <Value>Jobs</Value>

         </Item>

         <Item>

         <Code>Email</Code>

         <Value>Steve@Apple.com</Value>

         </Item>

         <Item>

         <Code>Phone</Code>

         <Value>1396008000</Value>

         </Item>

    </ns0:ComplexSource>

    Mapping后结果

    <ns0:SimpleTarget xmlns:ns0="http://XSLT_Mapping.SimpleTarget">

        <Contact>

            <FistName>Steve</FistName>

            <LastName>Jobs</LastName>

            <Email>Steve@Apple.com</Email>

        </Contact>

    </ns0:SimpleTarget>

    当你单击Map Validate,会生产一个XSLT脚本

     

    自定义XSLT脚本文件

    新建一个map,生产一个简单XSLT脚本模板

    打开XSLTMapping.xsl,加载到项目下

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

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0" version="1.0" xmlns:s0="http://XSLT_Mapping.ComplexSource" xmlns:ns0="http://XSLT_Mapping.SimpleTarget">

    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />

    <xsl:template match="/">

    <xsl:apply-templates select="/s0:ComplexSource" />

    </xsl:template>

    <xsl:template match="/s0:ComplexSource">

    <ns0:SimpleTarget>

    <xsl:for-each select="Item">

    <Contact>

    <FistName>

    <xsl:value-of select="Code/text()" />

    </FistName>

    </Contact>

    </xsl:for-each>

    </ns0:SimpleTarget>

    </xsl:template>

    </xsl:stylesheet>

     

    在map文件中添加XSLT脚本文件路径

     

    有了模板接下来就直接修改脚本即可

    <xsl:template match="/">

    <xsl:apply-templates select="/s0:ComplexSource" />

    </xsl:template>

    <xsl:template match="/s0:ComplexSource">

    <ns0:SimpleTarget>

    <!--xsl:for-each select="Item"-->

    <Contact>

    <FistName>

                    <xsl:value-of select="Item[Code='FirstName']/Value/text()" />

    </FistName>

                <LastName>

                    <xsl:value-of select="Item[Code='LastName']/Value/text()" />

                </LastName>

                <Email>

                    <xsl:value-of select="Item[Code='Email']/Value/text()" />

                </Email>

    </Contact>

            <!--/xsl:for-each-->

    </ns0:SimpleTarget>

    </xsl:template>

    </xsl:stylesheet>

    以上XPath表达式非常简单就不做说明了

    Debug调试功能

    这个功能非常强大可以单步调试

    调试执行情况

     

    对比使用biztalk mapper产生的XSLT和自定义XSLT脚本你会发现系统自动生成的脚本有非常多的冗余脚本,而直接利用XSLT编写的脚本非常简洁,自然执行效率会高出不少。

    自定义XSLT脚本对于开发EDI数据对接是最有用的,也是最能体现效率的地方。如果你的项目中有用到EDI的数据交换那么不妨试一下通过自定义XSLT脚本来实现mapping。

  • 相关阅读:
    poj3254 Corn Fields 利用状态压缩求方案数;
    UVA
    hdu 4272 LianLianKan 状态压缩
    项目棘手问题 没用
    70个HR面试题
    1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:
    2菜单数据添加 4.1角色添加
    SQL 数据排重,去掉重复数据 有用
    几种我背过的设计模式 有用
    运单waybill快速录入
  • 原文地址:https://www.cnblogs.com/neozhu/p/2276634.html
Copyright © 2020-2023  润新知