none
简单结构转为复杂结构的问题 RRS feed

  • 问题

  • 初学BIZTALK,遇到比较急的问题
    现在有XML文档A
    内容如下:
    <ns0:Request xmlns:ns0="http://Mapping_test.In">
      <test1>
        <Field>a</Field>
      </test1>
      <test1>
        <Field>b</Field>
      </test1>
      <test2>
        <Field>a</Field>
        <Field2>c</Field2>
      </test2>
      <test2>
        <Field>b</Field>
        <Field2>d</Field2>
      </test2>
      <test2>
        <Field>b</Field>
        <Field2>e</Field2>
      </test2>
    </ns0:Request>

    期望转换为:XML文档B
    <ns0:test xmlns:ns0="http://Mapping_test.Out">
      <test1>
        <Field>a</Field>
        <test2>
          <Field2>c</Field2>
          </test3>
        </test2>
      </test1>
      <test1>
        <Field>b</Field>
        <test2>
          <Field2>d</Field2>
          </test3>
        </test2>
         <test2>
          <Field2>e</Field2>
          </test3>
        </test2>
      </test1>
    </ns0:test>

    是在MAPPING中做比较好还是在构造消息形状中做比较好?
    试了下在MAPPING中用条件循环做,但是元素的赋值老是出问题
    请问有人能给个MAPPING的例子或是解决方案吗?谢谢
    2009年6月17日 8:43

全部回复

  • 应该说使用Mapping和构造消息都可以实现,,不过本着学习BizTalk的目的,,还是应该使用Mapping来实现。。

    主要使用循环Functoid。

    不过看看能否进行如下简化,对于http://Mapping_test.In可否只设别test2节点,根据test2进行循环处理,为了简单可以考虑使用2次Mapping,首先对test2里的Field进行数据循环提取,然后再根据提取后的数据结构再循环提取Field2。。并最终得到http://Mapping_test.Out

    另外http://Mapping_test.Out的</test3>是错误的吧???

    2009年6月19日 13:08
  • http://Mapping_test.Out的</test3>不是打错,是还有个空的test3的元素
    尝试过使用循环Functoid,但是这里出现了一点问题
    主要是在循环的过程中因为需要比较当test1的field和test2的field,当field相等时,才创建输出中的对应节点下的test2,
    但是在这之中就发现当根据test2做循环时,不会遍历test1中的所有field,经过求助得知是等于的Functoid只会根据输入的第一个参数做循环比较,因此达不到想要的效果

    2009年6月22日 2:18
  • 对于复杂的XSLT开发可以采用内联的XSLT方式。在调试时也可以造成XSLT进行调试。Visual Studio支持对XSLT的断点调试所以比较方便一点。
    2009年6月24日 7:33