Biztalk映射程序更改节点顺序
我需要将文档X映射到文档Y,两者非常相似。X具有以下XSD的[片段]:Biztalk映射程序更改节点顺序,biztalk,biztalk-mapper,Biztalk,Biztalk Mapper,我需要将文档X映射到文档Y,两者非常相似。X具有以下XSD的[片段]: <xsd:complexType> <xsd:sequence> <xsd:choice minOccurs="3" maxOccurs="unbounded"> <xsd:element maxOccurs="unbounded" ref="A" /> <xsd:element maxOccurs=
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="3" maxOccurs="unbounded">
<xsd:element maxOccurs="unbounded" ref="A" />
<xsd:element maxOccurs="unbounded" ref="B" />
<xsd:element maxOccurs="unbounded" ref="C" />
<xsd:element minOccurs="0" maxOccurs="unbounded" ref="D"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
Y具有相同的元素(A、B、C),但它们不在一个序列中
当我使用以下输入测试地图时,我的问题出现了:
<doc-X>
<A>...</A>
<B>...</B>
<C>...</C>
<D>...</D>
<C>...</C>
<D>...</D>
</doc-X>
...
...
...
...
...
...
我得到这样的东西:
<doc-Y>
<A>...</A>
<B>...</B>
<C>...</C>
<C>...</C>
<D>...</D>
<D>...</D>
</doc-Y>
...
...
...
...
...
...
我不明白为什么会发生这种情况,因为我只是将每个元素与其对应的对映射到另一个模式上。
编辑:我曾尝试将属性PreserveSequenceOrder设置为“是”,但没有成功XSD本身并不保证同级元素将以任何给定的顺序出现。从您描述的内容来看,根据其模式,输出似乎是完全有效的。你的测试地图真的失败了吗
是否有任何方法可以发布完整的架构和文档实例 之所以获得该输出,是因为Map始终查找从顶部元素到底部元素的输出文档(文档Y)连接。因此,在您的情况下,它将执行第一个elmenta(在文档Y中)链接,在B之后,在C之后 尝试将输出doucment(文档Y)xsd修改为如下内容
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="3" maxOccurs="unbounded">
<xsd:element maxOccurs="unbounded" ref="D" />
<xsd:element maxOccurs="unbounded" ref="C" />
<xsd:element maxOccurs="unbounded" ref="B" />
<xsd:element minOccurs="0" maxOccurs="unbounded" ref="A"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
您将看到不同之处….恐怕我既不能发布XSD也不能发布XML:S。正如您所提到的,根据其模式,生成的输出是有效的,但是输出随后被输入到两个方法中,这些方法将受益于所述的顺序。我现在无法测试这一点,但是您可以将元素包装成一个序列吗。所以选择/顺序/元素