1

我正在使用 biztalk 2009,需要地图方面的帮助。我有这样的输入:

<root>
    <shop>
        <product>
            <type>1</type>
            <code>ab</code>
            <desc></desc>
        </product>
        <product>
            <type>2</type>
            <code>cd</code>
            <desc></desc>
        </product>
    </shop>
    <address />
    <names />
</root>

我想将产品集合映射到目标元素作为 xml 字符串,如下所示: <products><product type="1" code="ab" /><product type="2" code="cd" /></products>

我找到了使用自定义 xslt 的解决方案,但我不想使用它,因为我们发现它非常善变。是否有任何 functoids 可以通过一些自定义脚本为我做到这一点?我也是交流夏普开发者,谢谢!

4

2 回答 2

2

使用简单的地图,这完全可以开箱即用。

这是原始的 XML 文件:

<root>
    <shop>
        <product>
            <type>1</type>
            <code>ab</code>
            <desc></desc>
        </product>
        <product>
            <type>2</type>
            <code>cd</code>
            <desc></desc>
        </product>
    </shop>
    <address />
    <names />
</root>

这是源架构:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="shop">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="1" maxOccurs="unbounded" name="product">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="type" type="xs:string" />
                    <xs:element name="code" type="xs:string" />
                    <xs:element name="desc" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="address">
          <xs:complexType />
        </xs:element>
        <xs:element name="names">
          <xs:complexType />
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这是目标架构:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="products">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="unbounded" name="product">
          <xs:complexType mixed="true">
            <xs:attribute name="type" type="xs:string" />
            <xs:attribute name="code" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这是地图:

源和目标架构的 BizTalk 映射

这是输出:

<products>
    <product type="1" code="ab" /> 
    <product type="2" code="cd" /> 
</products>

有了他的结果,您可以遵循 Mark Brimble 在他的博客中概述的两个建议之一。

如何将整个节点复制到地图中的字符串类型元素

于 2011-03-31T19:45:45.247 回答
0

我很抱歉这么说,但是当映射过于复杂并且在映射器中没有明显的方法可以做到这一点时,我只需要在 assign 消息中使用 .net 辅助方法,该方法将构建输出消息。

辅助方法可以将 biztalk 消息作为 XLANGMessage 类型的参数并返回一个 XMLDocument 类型,该类型将转换为您的目标消息类型,前提是内部的 xml 正确呈现该类型。

例如:

public static XmlDocument HelperMethod (XLANGMessage message)
{
    var sourceType = (SourceType)message[0].RetrieveAs(typeof(SourceType));
    var targetType = new TargetType();

    // ... Do target type population and serialization to XmlDocument here

    return targetAsXmlDoc;
}

在 .net 中执行此操作很简单,因此只需将其放入 .net 并执行即可。对不起所有的地图大师!

于 2011-04-04T11:07:00.227 回答