2016-12-29 195 views
1

我目前正在映射Json和XSD。 在Json中,數組包含具有相同元素的多個項目。如何將Json數組轉換爲XSD

JSON數組是這樣的:

"Item":[ 
    { 
     "ItemSequenceNo":0, 
     "AQuantity":{ 
     "code":"aaa", 
     "quantity":1 
     }, 
     "DQuantity":{ 
     "code":"ddd", 
     "quantity":4 
     }, 
     "Amount":{ 
     "currencyID":"USD", 
     "value":111 
     }, 

    }, 
    { 
     "ItemSequenceNo":1, 
     "AQuantity":{ 
     "code":"aaa", 
     "quantity":4 
     }, 
     "DQuantity":{ 
     "code":"ddd", 
     "quantity":9 
     }, 
     "Amount":{ 
     "currencyID":"USD", 
     "value":123 
     }, 
    } 
] 

我試圖映射此JSON數組使用XSD:

<xs:element name="Item"> 
    <xs:complexType> 
     <xs:sequence minOccurs="1" maxOccurs="50"> 
      <xs:element ref="p:ItemSequenceNo" minOccurs="1" maxOccurs="1"/> 
      <xs:element ref="p:AQuantity" minOccurs="1" maxOccurs="1"/> 
      <xs:element ref="p:DQuantity" minOccurs="1" maxOccurs="1"/> 
      <xs:element ref="p:Amount" minOccurs="1" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

其中裁判是這樣的:

<xs:element name="ItemSequenceNo"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
      <xs:totalDigits value="5"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 
<xs:element name="AQuantity"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:integer"> 
       <xs:attribute name="code"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:minLength value="0"/> 
          <xs:maxLength value="3"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
<xs:element name="DQuantity"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:integer"> 
       <xs:attribute name="code"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:minLength value="0"/> 
          <xs:maxLength value="3"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Amount"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:integer"> 
       <xs:attribute name="CurrencyID"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:minLength value="0"/> 
          <xs:maxLength value="3"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

事情是當我使用XSD映射Json數組時,數組項(元素)排序的輸出XML如下所示:

<item> 
    <ItemSequenceNo >0</ItemSequenceNo> 
    <ItemSequenceNo >1</ItemSequenceNo> 
    <AQuantity code="aaa">1</AQuantity> 
    <AQuantity code="aaa">4</AQuantity> 
    <DQuantity code="ddd">4</DQuantity> 
    <DQuantity code="ddd">9</DQuantity> 
    <Amount CurrencyID="USD">111</Amount> 
    <Amount CurrencyID="USD">123</Amount> 
</item> 

,而我期待的結果是兩個獨立的模塊:

<item> 
    <ItemSequenceNo >0</ItemSequenceNo> 
    <AQuantity code="aaa">1</AQuantity> 
    <DQuantity code="ddd">4</DQuantity> 
    <Amount CurrencyID="USD">111</Amount> 
</item> 

<item> 
    <ItemSequenceNo >1</ItemSequenceNo> 
    <AQuantity code="aaa">4</AQuantity> 
    <DQuantity code="ddd">9</DQuantity> 
    <Amount CurrencyID="USD">123</Amount> 
</item> 

有沒有人對我怎麼能得到這個任何想法?通過修改Json/XSD,還是有MapForce可以實現這個功能?

+0

謝謝大家。問題解決了。事實證明,在MapForce中,數組可以被識別並生成我想要的輸出。 – BOSubuntu

回答

0

你已經解決了它,就像你在你的評論中說的那樣,但是對於那些在這裏遇到同樣問題的人來說,尋找一個解決方案,在這裏提供一個答案會很好。

這可能有點違反直覺,即在MapForce中,您不會將JSON輸入中的項目數組的線條繪製到XML輸出中的項目節點。如果你這樣做,你會得到BOSubuntu描述的統一輸出。而是從數組包含的對象中繪製線條(請參閱下圖,紅色的線條)。這會給出所需的輸出。

JSON-Mapping to XML in Altova MapForce