montaque

小碗喝酒,小口吃肉

博客园 首页 新随笔 联系 订阅 管理
biztalk 是微软面向消息集成技术中很重要的一个产品,这里的消息可以理解为就是XML。对消息的处理,难免会有很多的操作,比如变换,筛选赋值,给予内容的路由等。

对于xml, 不同的变换我们一般用xslt去做。 而筛选和操作赋值一般就是用XQuery, 当然xslt和Xquery 都会共享一个Xpath。在biztalk的Orchastration内部,可以用Xpath来操作各种消息。biztalk提供了一个内置的函数叫做xpath。
比如:你可以筛选特定的记录值,他的语法是xpath(message, xpathExpression)


有时候你经常会发现,在程序中可以执行的xpath,到Biztalk中就是不能执行。 这时候check系统日值,你会看到很多的错误消息。
这时候,你一般是以下两点的原因:
1。请在Xpath 的表达式中显式的加入local-name 的判断。
比如我写的代码:
xpath(Msg_In,"//*[local-name()='PoNumber']"); 
在.net 中, 一般都直接写
Msg_In.SelectSingleNode("//PoNumber"); 
Biztalk 需要你显式的制定NodeName ,要么你可以用一个xpath 内置函数,local-name 返回QName的local部分。
2.如果你懒得些的话,可以把你的node 升级为 Distinguished field,看看微软生成的代码。



微软的xpath 这个语法,最终由那个对象来负责执行呢? 其实也是用.NET Framework 的DOM模型。

对于xpath这个函数,biztalk在编译一个项目的时候,会替换成这样的一个函数。当然,Biztalk 的所有文件都会转换成一个cs文件,然后在编译为dll. 你可以通过显示所有文件,看到流程对应的cs文件。
Microsoft.XLANGs.Core.Part.XPathLoad


而XPathLoad 就是执行类似的代码:
Xmodocument.CreateNavigator().Evaluate(xpath);
这个方法在Microsoft.XLANGs.Engine.dll 这个程序集中
posted on 2006-09-04 14:35  montaque  阅读(1285)  评论(1编辑  收藏  举报