Как конвертировать массив Json в XSD
В настоящее время я картирую Json и XSD. В Json есть массив, содержащий несколько элементов с одинаковыми элементами.
массив 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>
Дело в том, что когда я сопоставляю массив 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>
в то время как ожидаемый результат - два отдельных блока:
<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
что может достичь этого?
1 ответ
Вы уже решили это, как вы сказали в своем комментарии, но для людей, которые приезжают сюда с той же проблемой и ищут решение, было бы неплохо дать ответ здесь.
Это может быть немного нелогично, так как в MapForce вы не рисуете линию от массива Item на входе JSON до узла Item на выходе XML. Если вы сделаете это, вы получите унифицированный вывод, который описал BOSubuntu. Вместо этого вы рисуете линию из объектов, содержащихся в массиве (см. Рисунок ниже, линия отмечена красным). Это даст желаемый результат.