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 循环仿函数的主要内容,如果未能解决你的问题,请参考以下文章