如何为给定的XML创建XSD

本文关键字:XML 创建 XSD | 更新日期: 2023-09-27 17:58:35

对于下面的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>

有人能帮助如何声明"NewDataSet"元素吗?提前谢谢。

如何为给定的XML创建XSD

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

无论如何,这是一个很好的开始方式。XSD.exe 上的MSDN文档

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

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

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

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论坛上回答这个问题的人。