我需要将文档X映射到文档Y,两者都非常相似。 X具有以下[XSD片段]:
<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 属性设置为“是”,但这样做无效
答案 0 :(得分:0)
XSD本身并不能保证兄弟元素会以任何给定的顺序出现。根据您的描述,听起来输出根据其架构完全有效。你真的在测试图中出现故障吗?
有没有办法发布完整的架构和文档实例?
答案 1 :(得分:0)
您正在获取该输出,因为Map始终查找从顶部元素到底部元素的输出文档(文档Y)连接。所以在你的情况下,它将执行第一个元素A(在文档Y中)链接,然后是B,在那个C之后。
尝试将输出doucment(文档Y)xsd修改为sth,如此
<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>
你会看到差异.....