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。

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

  1. oracle ebs form 计算 汇总公式,Oracle+EBS+Form开发小技巧汇总

    oracle form开发的技巧 content Oracle EBS Form开发小技巧汇总 ..................................... 2 Form中Block的重 ...

  2. MTK 手机开发小技巧(2)

    MMICheckDiskDisplay            开机点亮背光 PEN_CHECK_BOUND              检查触笔位置是否在控制区域 wgui_general_pen_do ...

  3. 日常安排php,PHP日常开发小技巧

    PHP日常开发小技巧 导语:PHP语言中,如果你懂得一些开发技巧,那么对你学PHP,会有很大的帮助.下面的是百分网小编为大家整理的PHP日常开发小技巧,希望对你能有所帮助. PHP批量取得checkb ...

  4. Silverlight 游戏开发小技巧:动感小菜单2

    Silverlight 游戏开发小技巧:动感小菜单2 动感小菜单其实是想模仿Apple的菜单按钮设计制作,但是画虎不成反类犬,看起来有点别扭,昨天各位园友提了这方面的建议,感觉太硬如果加入动画可能更好 ...

  5. Silve“.NET研究”rlight 游戏开发小技巧:传说中的透视跑马灯

    昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一 ...

  6. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单

    网页应用受限于自身的浏览器范畴,不能把华丽效果完全展示,正是因为如此,在网页上诞生了无数绚丽的设计,虽然动感程度和桌面应用无法比拟,但是在UI上却下足了功夫,用户体验可以说无以伦比,比如说小小的菜单, ...

  7. Silverlight 游戏开发小技巧:轨迹跟随效果

    Silverlight 游戏开发小技巧:轨迹跟随效果 我们通常在游戏中有各种各样的粒子效果,其中有一种就是跟随鼠标发生的轨迹动画,在鼠标经过的地方会产生一些特效,这种方式我们在粒子当中经常使用,本篇使 ...

  8. Delphi三层开发小技巧:TClientDataSet的Delta妙用

    Delphi三层开发小技巧:TClientDataSet的Delta妙用 Delphi做三层开发时,很多人都会在客户端放一个TClientDataSet,中间层远程数据模块就对应放一个TDataSet ...

  9. 极客技术专题【009期】:web技术开发小技巧

    为什么80%的码农都做不了架构师?>>>    日期:2013-8-26  来源:GBin1.com 技术专题:Seajs介绍 (分享人:choaklin) 专题演讲稿:SeaJS的 ...

最新文章

  1. iOS FMDB之FMDatabaseQueue(事物与非事物)
  2. 工业相机和镜头说明与图像采集
  3. java获取浏览器版本号
  4. 从零开始学习python | 实例讲解如何制作Python模式程序
  5. Karoly Nyisztor
  6. 嵌入式ubuntu14.04开发环境搭建(详细图解)
  7. java读取csv文件忽略bom头_PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法...
  8. NATS_11:NATS集群构建与验证
  9. 【航模】凤凰模拟器安装
  10. .chm文件打开方式,解决.CHM文件打不开或者打开空白
  11. Markdown的下载与应用
  12. Beacon API的应用
  13. 第五章 课后习题(P139-140)
  14. 图形界面介绍Create Pin Blockage
  15. 计算机专业的工匠精神例子,市计算机:传承中华传统文化,弘扬工匠精神
  16. c/c++中的内存分配器
  17. 高级项目管理-4、项目范围、进度、成本、质量管理
  18. FreeBSD硬盘分区和数据迁移相关资料
  19. matlab hough算法车牌识别,一种利用Hough变换和先验知识的车牌识别新方法
  20. 30、买卖股票的最好时机

热门文章

  1. 阿里巴巴关于Java重要开源项目汇总
  2. 李沐:五年工作反思!
  3. 图灵奖得主Jeff Ullman直言:机器学习不是数据科学的全部!统计学也不是
  4. 神经网络知识专题总结!
  5. 三年 Git 使用心得 常见问题整理
  6. 【廖雪峰python入门笔记】列表生成式
  7. 50岁马斯克又恋爱了!27岁金发女友长着芭比娃娃脸
  8. 计算机视觉领域如何从别人的论文里获取自己的idea?
  9. 深度学习vs机器学习 | 这些本质区别你知道多少?
  10. 求表达式 f(n)的结果