前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BizTalk 开发小技巧-Custom XSLT复杂mapping的简单实现

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

作者头像
阿新
发布2018-04-12 16:19:12
1.6K0
发布2018-04-12 16:19:12
举报
文章被收录于专栏:c#开发者c#开发者c#开发者

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。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-12-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个例子比较常见
    • 自定义XSLT脚本文件
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档