我有一个结构化的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中的一个小脚本)来实现这一点?
非常感谢, 罗布。
答案 0 :(得分:0)
看起来可以使用循环和逻辑相等的functoid来完成。如果您可以提供实际的模式或仅提供数据的子样本,那么就更容易理解。
上面显示的源模式使得它看起来应该能够通过循环functoid来实现它,因为你可以有多个。
答案 1 :(得分:0)
是否可以获得预期xml的子样本?如何了解您对响应文件的期望。你期望根目录下有多个元素序列吗?我认为如果您的目标模式具有不同的根节点会更容易。
即
<Trips>
<Trip>
<Registration />
<Distance />
<Duration />
</Trip>
</Trips>
除非你使用XSLT,否则我认为你不能维持元素序列的顺序。