BizTalk -->

by muyanpeng
posts - 12, comments - 62, trackbacks - 0, articles - 1
这篇文章也是酝酿了很久的了,在POC的时候总是有哥们儿问到拆分结果集的问题.有的时候就只能通过循环这种方式来做,苦于还没有一个合适的例子奉献给大家,今天就写一篇这样的文章和大家分享.希望可以对大家的工作,学习有所帮助.

首先介绍一下思路
1.获得类似记录的节点的count,假设我们有300条相似记录现在要拆分成1条1条的,那么这个count就是300
2.设置一个index值 这个值是0为起始的
3.进行循环 循环的条件是 index < count
4.将index所对应的条目信息send到port
5.累加index :  index = index + 1;

流程截图:


大体思路如图 应该就能看的明白,这里需要一个DLL的帮助来解析XML消息,我贴一下源码,主要两个方法 一个是负责取COUNT的,一个是根据index取到内容信息:
public class Class1
    
{
        
public static int getLength(XmlDocument xd)
        
{
            
return xd.ChildNodes[0].ChildNodes.Count;
        }


        
public static XmlDocument getInfo(XmlDocument xd,int index)
        
{
            XmlDocument xdResult  
= new XmlDocument();
            xdResult.InnerXml 
= "<ns0:Root xmlns:ns0=\"http://BizTalkLoopProject.Schema1\"><info>" + xd.ChildNodes[0].ChildNodes[index].InnerXml + "</info></ns0:Root>";
            return xdResult;
        }

    }

部署的时候 只要使用FILE  Adapter就可以了
看一下输入和输入文件:
input (one file)
<ns0:Root xmlns:ns0="http://BizTalkLoopProject.Schema1">
 
<info>
  
<a>a1</a> 
  
<b>b1</b> 
 
</info>
 
<info>
  
<a>a2</a> 
  
<b>b2</b> 
 
</info>
</ns0:Root>

output (two files)
<?xml version="1.0" encoding="utf-8"?><ns0:Root xmlns:ns0="http://BizTalkLoopProject.Schema1">
  
<info>
    
<a>a1</a>
    
<b>b1</b>
  
</info>
</ns0:Root>

<?xml version="1.0" encoding="utf-8"?><ns0:Root xmlns:ns0="http://BizTalkLoopProject.Schema1">
  
<info>
    
<a>a2</a>
    
<b>b2</b>
  
</info>
</ns0:Root>

惯例: 源码下载

Feedback

#1楼    回复  引用  查看    

2007-12-26 15:52 by 西煞魄工人      
阅...

#2楼    回复  引用  查看    

2007-12-27 11:33 by 相濡以沫      
i不错,不错,,学习。

#3楼    回复  引用    

2007-12-27 18:51 by deformity [未注册用户]
学习,谢谢木头

#4楼    回复  引用  查看    

2007-12-27 21:13 by 利未      
呵呵,在园子里看到了你的文章了。期待更多文章。

#5楼    回复  引用    

2008-01-05 15:15 by gozh2002 [未注册用户]
Good Article!!!
Do you really need the disassembly in a static class?
Can we use xpath to do it?

#6楼    回复  引用  查看    

2008-01-08 16:26 by PENGYQ      
认真阅读了楼主的文章和评论,写的很好.
楼上的说的有点道理,调用静态类是不是有点奢侈了.
本人所在项目中,获取记录总数和单个消息使用XPATH,个人感觉更好点.
比如:
str_Xpath = "count(/*[local-name()='YYMCRoot' and namespace-uri()='******/source']/*[local-name()='YYMC' and namespace-uri()='******/source'])";
int_Count = (System.Int32)xpath(Msg_Source.para, str_Xpath);

其中XPath可以从节点的属性Instance XPath中复制.

#7楼    回复  引用    

2008-01-09 10:14 by Zhengrui [未注册用户]
为什么部署程序后,按照楼主的输入文件,却有5个输出文件,其中3个文件的节点为空.
<?xml version="1.0" encoding="utf-8"?><ns0:Root xmlns:ns0="http://BizTalkLoopProject.Schema1">
<info>
</info>
</ns0:Root>

#8楼 [楼主]   回复  引用  查看    

2008-01-09 21:40 by 穆彦鹏      
Zhengrui

是因为你的输入xml节点间有换行符 或者是空格 导致的

你试着将输入的XML规范一下

#9楼 [楼主]   回复  引用  查看    

2008-01-09 21:42 by 穆彦鹏      
gozh2002 PENGYQ :

谢谢你们的建议 最近比较忙. 我会找时间试着做一个XPATH的DEMO ~

再次感谢你们的经验 建议

#10楼    回复  引用    

2008-01-29 15:34 by gxcsoccer [未注册用户]
@穆彦鹏
是因为你的输入xml节点间有换行符 或者是空格 导致的

你试着将输入的XML规范一下


我也碰到了类似的问题, 请问这个到底是为什么呢?

#11楼    回复  引用  查看    

2008-04-20 16:50 by jhtchina      
学习
我也是遇到这样问题
其中有节点为空
<?xml version="1.0" encoding="utf-8"?><ns0:Root xmlns:ns0="http://BizTalkLoopProject.Schema1">
<info>
</info>
</ns0:Root>

#12楼    回复  引用  查看    

2008-04-20 16:54 by jhtchina      
问题解决
主要是
<ns0:Root xmlns:ns0="http://biztalk_Loop_project.Schema1"><info><a>a_0</a><b>b_0</b></info><info><a>a_1</a><b>b_1</b></info><info><a>a_0</a><b>b_0</b></info></ns0:Root>
不能有空格或者回车

#13楼    回复  引用  查看    

2008-04-20 17:18 by jhtchina      
引用了你的文章
http://www.cnblogs.com/jhtchina/articles/1162627.html
谢谢你

#14楼    回复  引用    

2008-06-10 16:31 by 毅 [未注册用户]
請問public static XmlDocument getInfo(XmlDocument xd,int index)
這個是否能用xpath取代呢?
如果可以,是否能做範例
感謝感謝

#15楼 [楼主]   回复  引用  查看    

2008-06-13 14:02 by 穆彦鹏      
xpath(Message,"System.String.Format("/*[local-name()='Info' and namespace-uri()='http://wood" target="_new">http://wood']/*[local-name()='woodTemp' and namespace-uri()='http://wood" target="_new">http://wood'][{0}]", Count)")

#16楼 [楼主]   回复  引用  查看    

2008-06-13 14:03 by 穆彦鹏      
注意后面的那个count替换的位置 你就能理解了

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交