Biztalk mapper, изменяющий порядок узлов - PullRequest
0 голосов
/ 29 марта 2011

Мне нужно сопоставить документ 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 значение "Да", но это не сработало

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Вы получаете этот вывод, потому что 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>

Вы увидите разницу .....

0 голосов
/ 30 марта 2011

XSD сам по себе не гарантирует, что родственные элементы появятся в любом заданном порядке. Из того, что вы описали, звучит так, что выходные данные совершенно верны в соответствии со своей схемой. Вы на самом деле получаете ошибку в вашей тестовой карте?

Можно ли как-нибудь опубликовать полную схему и экземпляры документа?

...