如何为给定的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"元素吗?提前谢谢。
您可以使用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论坛上回答这个问题的人。