BizTalk 循环仿函数

Posted

技术标签:

【中文标题】BizTalk 循环仿函数【英文标题】:BizTalk Looping Functoid 【发布时间】:2010-09-24 06:01:42 【问题描述】:

我有一个结构化的 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 中的一个小脚本)来实现这一点?

非常感谢, 抢。

【问题讨论】:

您好 Rob,您能否提供输入 xml 的示例。 【参考方案1】:

看起来可以使用循环和逻辑相等 functoid 来完成。如果您可以提供您的实际模式或只是数据的子样本,那么它会更容易弄清楚。

上面显示的源架构看起来你应该能够只用一个循环functoid来做到这一点,因为你可以有多个。

【讨论】:

【参考方案2】:

是否可以获得预期 xml 的子样本?想一想您希望响应文件的外观如何。您是否希望在根下有多个元素序列?我认为如果您的目标架构具有不同的根节点会更容易。

即。

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

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

【讨论】:

以上是关于BizTalk 循环仿函数的主要内容,如果未能解决你的问题,请参考以下文章

STL 仿函数(函数对象)

函数对象(仿函数)

仿函数和函数指针

C++_26_仿函数C++_26_仿函数

仿函数及其应用

SGI STL functors(仿函数) 12