C# 如何为给定的XML创建XSD?

C# 如何为给定的XML创建XSD?,c#,xml,xsd,xsd-validation,C#,Xml,Xsd,Xsd Validation,对于下面的XML,我需要生成创建的XSD,但得到一个错误 未声明“NewDataSet”元素 VMD 65-12-392 HZLPG BC-BBH-OS-4LI21392 XSD: <?xml version="1.0"?> <xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="quali

对于下面的XML,我需要生成创建的XSD,但得到一个错误

未声明“NewDataSet”元素


VMD
65-12-392
HZLPG
BC-BBH-OS-4LI21392
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”元素吗?
提前感谢。

首先,根元素“NewData”没有在XSD中声明。
我建议您先看看这个:

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

无论如何,这是一个开始的好方法

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


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

XMLSchemaReference类可用于将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 );  
        } 

第二条路

下面是一个例子:

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


所有的功劳都归于在论坛上回答问题的人

xsd.exe或使用xsd.exe生成的c#时出现了什么错误?使用c#验证XML和xsd时,未声明“NewDataSet”元素之类的错误。是否可以显示正在使用的代码?XML与xsd不匹配-甚至没有一个元素匹配(请记住,XML是区分大小写的,所以
不一样。我不明白您为什么要编写代码来调用xsd.exe?您可以从控制台在上调用它。他没有说他必须在运行时这样做。@AnthonyLambert,是的,在这种情况下
xsd.exe
就足够了。+1)。
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);