2016-12-29 5 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 
     }, 
    } 
] 

私はXSDでこのJSON配列をマッピングしてみました:

<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> 

はものがある:refは同様である

<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> 

私がJsonの配列をXSDでマッピングしているとき、出力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> 

私は期待していた結果、2つの別々のブロックである間:

<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入力のItem-ArrayからXML出力のItemノードへの線を描画しないことが直観的ではないかもしれません。そうした場合、BOSubuntuが説明した統一された出力が得られます。代わりに、配列に含まれるオブジェクトから線を描画します(下の図を参照して、赤でマークされた線を参照)。これにより、所望の出力が得られる。

JSON-Mapping to XML in Altova MapForce

関連する問題