1

我有一个结构化的 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 并将数据复制到目标模式。

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

非常感谢,罗布。

4

2 回答 2

0

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

IE。

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

除非您使用 XSLT,否则我认为您无法保持元素序列的顺序。

于 2008-12-10T13:33:43.540 回答
0

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

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

于 2008-12-02T18:34:00.850 回答