zoukankan      html  css  js  c++  java
  • [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     }

     

  • 相关阅读:
    命保住了!五年时间,我们也搞了一个技术中台(转)
    为什么要前后端分离?有什么优缺点?(转)
    Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(优缺点对比)
    Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(使用整理)
    Java WebService(实战) 简单实例
    Intellij IDEA svn的使用记录
    IDEA SonarLint安装及使用
    Java开发中的23种设计模式详解(收藏-转)
    Java中的static关键字解析
    触发器_实现ORACEL自动增长字段
  • 原文地址:https://www.cnblogs.com/fuhongwei041/p/1685681.html
Copyright © 2011-2022 走看看