如何为给定的XML创建XSD?

时间:2014-04-15 11:28:40

标签: c# xml xsd xsd-validation

对于以下XML,我需要生成XSD但是出现错误

  

' NewDataSet'元素未声明

<NewDataSet>
 <Table>
  <SITE>VMD</SITE>
  <TANK>65-12-392</TANK>
  <SERVICE>HZLPG</SERVICE>
  <IP21TAG>BC-BBH-OS-4LI21392</IP21TAG>
 </Table>
</NewDataSet>

XSD:

<?xml version="1.0"?>
 <xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="PAS">
 <xs:complexType>
   <xs:sequence>
<xs:element name="Records">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Site" type="xs:string" />
      <xs:element name="Plant" type="xs:string" />
      <xs:element name="Tank" type="xs:string" />
      <xs:element name="Service" type="xs:string" />
      <xs:element name="IP21Tag" type="xs:string" />
    </xs:sequence>
   </xs:complexType>
  </xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

任何人都可以帮助如何声明&#39; NewDataSet &#39;元件? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用Microsoft提供的xsd.exe从示例XML生成XSD。您只会生成一个与您的示例匹配的XSD,因此您需要一个示例来包含您希望解析的所有案例,或者您必须进一步编辑XSD以包含这些案例。

无论如何,这是一个很好的入门方式。 MSDN Docs on XSD.exe

一旦你有了一个XSD文件,你可能想要使用像XSD2Code这样的工具,它将生成读取XML所需的所有代码,并将其转换为内存中的一组c#对象。

(这假设您可以一次性将所有XML读入内存。否则,您需要使用事件SAX类型方法读取XML。)

答案 1 :(得分:0)

首先,在XSD中未声明根元素“NewData”。 我建议你先看看这个:http://www.w3schools.com/schema/schema_example.asp

答案 2 :(得分:0)

XmlSchemaInference类可用于将xml转换为xsd,如:

        XmlReader reader = XmlReader.Create ( "contosoBooks.xml" );  
        XmlSchemaSet schemaSet = new XmlSchemaSet ( );  
        XmlSchemaInference schema = new XmlSchemaInference ( );  
        schemaschemaSet = schema.InferSchema ( reader );  
        foreach ( XmlSchema s in schemaSet.Schemas ( ) )  
        {  
            s.Write ( Console.Out );  
        } 

http://msdn.microsoft.com/en-us/library/system.xml.schema.xmlschemainference.aspx

第二种方式,

以下是示例:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.FileName = "Xsd.exe"; 
p.StartInfo.Arguments = "C:\\config.xml /outputdir:C:\\Temp"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
p.WaitForExit(); 
Console.WriteLine("OUTPUT FROM XSD.EXE : " + output); 

这将从config.xml创建config.xsd文件。

所有功劳都归功于在msdn论坛上回复的人。