为什么<;选择>;节点是在使用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><@U1J8V9></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
,这破坏了我的代码。
两个messages
元素共有5个子元素(type
、subtype
、text
、user
、ts
),但顺序不同。
生成的模式本质上说"这些东西中的任何一个在messages
中都是有效的,但顺序并不重要"。