首页 > 解决方案 > XSD 转换 JSON 数组

问题描述

我正在尝试将 JSON 以下转换为 XSD,但是我无法为数组类型提供正确的 XSD。

{
    "activeIndicator": true,
    "entities": [
        {
            "type": "one",
            "bid": "12444",
            "name": "dsdsddd"
        },
        {
            "type": "sss",
            "bid": "322333",
            "name": "sdfsfff"
        },
        {
            "type": "sddssddsd",
            "bid": "4343434",
            "name": "ffdssdddd"
        },
        {
            "type": "rerererer",
            "bid": "5767767",
            "name": "fdsfdffff"
        }
    ],
    "expiryDateIndicator": true
}

下面是我到目前为止提出的 XSD。

<xsd:complexType name="EntityType">
    <xsd:sequence>
        <xsd:element name="type" type="xsd:string"/>
        <xsd:element name="bid" type="xsd:string"/>
        <xsd:element name="name" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:element name="Response">
    <xs:complexType>
        <xsd:sequence>
            <xsd:element name="activeIndicator" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
            <xs:element name="entities">
                <xs:simpleType>
                    <xs:list itemType="EntityType"/>
                </xs:simpleType>
            </xs:element>
        </xsd:sequence>
    </xs:complexType>
</xsd:element>

但上面是在尝试编译时抛出org.xml.sax.SAXParseException: undefined simple type 'EntityType' 。很想知道我在这里缺少什么。

标签: xmlxsdxsd-validation

解决方案


列表的项类型必须是简单类型,而不是复杂类型。

您尚未显示要用于表示此 JSON 数据的 XML 实例,但我认为不太可能使用列表类型。我希望像

<entities>
  <entity>
    <type>x</type>
    <bid>y</bid>
    <name>z</name>
  </entity>
  <entity>
    <type>x</type>
    <bid>y</bid>
    <name>z</name>
  </entity>
</entities>

在这种情况下entities将被定义为:

    <xs:element name="entities">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
               <xs:element name="entity" type="EntityType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

推荐阅读