2016-07-19 11 views
0

Um ein XML-Schema aus einem JSON zu erstellen, konvertiere ich den JSON in XML und verwende dann XmlSchemaInference.InferSchema. Das resultierende Xml-Schema enthält einen Auswahlknoten. Unten finden Sie die xml genereated von JsonWarum <Choice> Knoten wird erstellt, während XmlSchemaInference.InferSchema verwendet?

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

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

mit XmlSchemaInference.InferSchema erzeugt wird, verwende ich TreeNodeCollection alle Knoten des Schema-Elements zu erhalten und verwenden TreeNode.Text die bekommen Name. Treenode.Text für den Auswahlknoten gibt mir den Wert <Choice> anstelle von choice und das bricht meinen Code.

Antwort

0

Beiden messages Elemente teilen 5 gemeinsame Kind-Elemente (type, subtype, text, user, ts), aber sie sind in der gleichen Reihenfolge nicht.

Das resultierende Schema sagt im Wesentlichen: "Jeder dieser Sachen ist innerhalb messages gültig, aber die Reihenfolge ist nicht wichtig".

Verwandte Themen