为什么<;选择>;节点是在使用XmlSchemaInference.InferSchema时创建的

本文关键字:XmlSchemaInference InferSchema 创建 选择 lt gt 节点 为什么 | 更新日期: 2023-09-27 17:57:32

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

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

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

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

我使用TreeNodeCollection来获取schema元素的所有节点,并使用TreeNode.Text来获取名称。选择节点的Treenode.Text给我的值是<Choice>,而不是choice,这破坏了我的代码。

为什么<;选择>;节点是在使用XmlSchemaInference.InferSchema时创建的

两个messages元素共有5个子元素(typesubtypetextuserts),但顺序不同。

生成的模式本质上说"这些东西中的任何一个在messages中都是有效的,但顺序并不重要"。

相关文章:
  • 没有找到相关文章