对于以下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;元件? 提前谢谢。
答案 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论坛上回复的人。