0

我需要将文档 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设置为“是”,但这没有奏效

4

2 回答 2

0

您正在获得该输出,因为 Map 始终查找从顶部元素到底部元素的输出文档(文档 Y)连接。因此,在您的情况下,它将执行第一个元素 A(在文档 Y 中)链接,然后是 B,然后是 C。

尝试将输出文档(文档 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>

你会看到不同的......

于 2011-03-31T11:24:20.343 回答
0

XSD 本身并不能保证同级元素会以任何给定的顺序出现。根据您的描述,听起来输出根据其架构完全有效。你的测试地图真的失败了吗?

有什么方法可以发布完整的架构和文档实例?

于 2011-03-29T20:37:26.317 回答