[BizTalk开发基础]xpath in orchestration

在Orchestration中我们常常需要:

1)从Message中取值来做判断(比如提取CustomerMessage中的IsVIP来做不同的业务处理)等。

2)修改Message中的某些值,然后做业务处理,比如提取CustomerMessage中的IsVIP值,如果IsVIP=true,则赠送100美元的购物券等等。

xpath函数的签名:xpath(message, xpathString)

在开发中,经常遇到xpath函数在运行时出错,调试起来很不方便,所以在写xpathString时一定要小心。比如在取一个字符型结点的值时,可以用XPath string(),尽量使用local-name()和namespace-uri()。

示例:

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

< SalesOrder >
    
< Items >
        
< Item  Code ="Item001"  Price ="18.00"  Qty ="1" />
        
< Item  Code ="Item002"  Price ="18.00"  Qty ="2" />
        
< Item  Code ="Item003"  Price ="18.00"  Qty ="3" />
    
</ Items >
</ SalesOrder >

 

 

        1)取SalesOrder中Item的个数

count(/*[local-name()='SalesOrder']/*[local-name()='Items']/*[local-name()='Item'])

2)取第一个Item的Code

string(/*[local-name()='SalesOrder']/*[local-name()='Items']/*[local-name()='Item'][1]/@Code)

3)取第一个Item的Qty

 

number(/*[local-name()='SalesOrder']/*[local-name()='Items']/*[local-name()='Item'][1]/@Code)

在开发过程中,有时候我们经常会个性Schema,所以会涉及到个性xpath,那时候我们可能就要去Orchestration中去找这些xpath然后修改了。这样很不方便,相对可行的方法是把所有要用的xpath写在一个helper类中或者写在配置文件中

 

也可以先利用XPathNavigator对xpath进行充分的单元测试。可以参考下面的示例代码:

 1  [TestFixture]
 2       class  TestXPathStatements
 3      {
 4          [Test]
 5           public   void  TestXPathSalesOrderItemCount()
 6          {
 7               object  val  =  EvalXPath( " SalesOrder.xml " , XPathConstants.SALESORDER_ITEM_COUNT);
 8          }
 9 
10           private   object  EvalXPath( string  xmlInstance,  string  xpath)
11          {
12               string  filePath  =  Path.Combine(
13                  Path.Combine(AppDomain.CurrentDomain.BaseDirectory,  " XmlInstance " ),
14                  xmlInstance);
15 
16               using  (StreamReader sr  =   new  StreamReader(filePath))
17              {
18                  XPathDocument xpathDoc  =   new  XPathDocument(sr);
19                  XPathNavigator nav  =  xpathDoc.CreateNavigator();
20 
21                   return  nav.Evaluate(xpath);
22              }
23          }
24      }

 

转载于:https://www.cnblogs.com/fuhongwei041/archive/2010/03/14/1685681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值