BizTalk循环Functoid

时间:2008-11-26 21:52:02

标签: biztalk

我有一个结构化的XML文件格式,需要映射到更平的XML格式。通常我会为此创建一个自定义XSLT文件,并让BizTalk映射使用它。但是,我确实喜欢在可能的情况下使用图形地图的想法 - 直接深入XSLT很容易,但对于那些跟着你快速了解地图正在做什么的人来说却不那么容易!

我怀疑使用表循环函数和表提取器functoid可以实现映射,但我已经尝试了几个小时但失败了:(

注意:我无法控制源XSD - 这来自第三方。这是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  attributeFormDefault="unqualified">
<xs:element name="VehicleTrips">
    <xs:annotation>
        <xs:documentation>Comment describing your root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="Vehicle">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="VehicleID"/>
                        <xs:element name="VehicleRegistration"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Trips">
                <xs:complexType>
                    <xs:sequence maxOccurs="unbounded">
                        <xs:element name="VehicleId"/>
                        <xs:element name="Distance"/>
                        <xs:element name="Duration"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

...这里是目标XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Trips">
    <xs:annotation>
        <xs:documentation>Comment describing your root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="VehicleRegistration"/>
            <xs:element name="Distance"/>
            <xs:element name="Duration"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

总而言之,我需要查看Trips,从Vehicle获取VehicleRegistration,键入VehicleId并将数据复制到目标模式。

是否有人知道是否/如何仅使用functoid(或者脚本functoid中的一个小脚本)来实现这一点?

非常感谢, 罗布。

2 个答案:

答案 0 :(得分:0)

看起来可以使用循环和逻辑相等的functoid来完成。如果您可以提供实际的模式或仅提供数据的子样本,那么就更容易理解。

上面显示的源模式使得它看起来应该能够通过循环functoid来实现它,因为你可以有多个。

答案 1 :(得分:0)

是否可以获得预期xml的子样本?如何了解您对响应文件的期望。你期望根目录下有多个元素序列吗?我认为如果您的目标模式具有不同的根节点会更容易。

<Trips>
   <Trip>
      <Registration />
      <Distance />
      <Duration />
   </Trip>
</Trips>

除非你使用XSLT,否则我认为你不能维持元素序列的顺序。