为什么在使用XmlSchemaInference.InferSchema时创建<choice>节点?

时间:2016-07-19 08:28:12

标签: c# xml c#-4.0 xsd xsd.exe

要从json创建xml架构,我将Json转换为XML,然后使用XmlSchemaInference.InferSchema。生成的Xml架构包含一个选择节点。 以下是从Json发酵的xml

houses[i].ID === peoples[j].HOUSE_ID

下面是使用XmlSchemaInference.InferSchema生成的xmlschema

<RESPONSE_DATA>
    <ok>true</ok>
    <messages>
        <type>message</type>
        <subtype>file_share</subtype>
        <text>something</text>
        <file>
            <id>IFD</id>
            <created>1468845544</created>
            <timestamp>1468845544</timestamp>           
        </file>
        <user>IJSA</user>
        <upload>true</upload>
        <display_as_bot>false</display_as_bot>
        <username>&lt;@U1J8V9&gt;</username>
        <bot_id />
        <ts>1468845544.000002</ts>
    </messages>
    <messages>
        <user>U1J98V9</user>
        <text>9EK8V9</text>
        <type>message</type>
        <subtype>group_join</subtype>
        <ts>1468472817.000002</ts>
    </messages>
    <has_more>false</has_more>
</RESPONSE_DATA>

我使用TreeNodeCollection获取schema元素的所有节点,并使用TreeNode.Text获取名称。选择节点的Treenode.Text给我的值为<?xml version="1.0" encoding="utf-16"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="RESPONSE_DATA"> <xs:complexType> <xs:sequence> <xs:element name="ok" type="xs:boolean" /> <xs:element maxOccurs="unbounded" name="messages"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="type" type="xs:string" /> <xs:element name="subtype" type="xs:string" /> <xs:element name="text" type="xs:string" /> <xs:element name="file"> <xs:complexType> <xs:sequence> <xs:element name="id" type="xs:string" /> <xs:element name="created" type="xs:unsignedInt" /> <xs:element name="timestamp" type="xs:unsignedInt" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="user" type="xs:string" /> <xs:element name="upload" type="xs:boolean" /> <xs:element name="display_as_bot" type="xs:boolean" /> <xs:element name="username" type="xs:string" /> <xs:element name="bot_id" /> <xs:element name="ts" type="xs:decimal" /> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="has_more" type="xs:boolean" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 而不是<Choice>,这会破坏我的代码。

1 个答案:

答案 0 :(得分:0)

两个messages元素共享5个常见子元素(typesubtypetextuserts),但它们是'不一样的顺序。

结果模式基本上表示'这些内容在messages内是有效的,但顺序并不重要'。