我正在使用MSDN
中的这段代码从XML
XmlReader reader = XmlReader.Create("contosoBooks.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schemaSet = schema.InferSchema(reader);
foreach (XmlSchema s in schemaSet.Schemas())
{
textbox.text = s.ToString();
}
我想根据我的xml文件输出.xsd。当我生成.xsd文件时,我遇到的唯一内容是:System.Xml.Schema.XmlSchema
当我使用Visual Studio选项生成XSD来创建Schema时,它会正确显示。但是,我有超过150个xml文档,我需要创建XSD,因此需要一个编程选项。有人可以帮忙吗?
答案 0 :(得分:14)
xsd.exe
可以做你想做的事:
如果指定XML文件(扩展名为.xml),则Xsd.exe会推断架构 从文件中的数据生成XSD架构。输出文件 与XML文件同名,但扩展名为.xsd。
以下命令从myFile.xml生成XML架构并将其保存到指定目录。
xsd myFile.xml /outputdir:myOutputDir
或强>
您可以通过编程方式尝试:
XmlReader reader = XmlReader.Create(@"yourxml.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schemaSet = schema.InferSchema(reader);
foreach (XmlSchema s in schemaSet.Schemas())
{
using (var stringWriter = new StringWriter())
{
using (var writer = XmlWriter.Create(stringWriter))
{
s.Write(writer);
}
textbox.text = stringWriter.ToString();
}
}
答案 1 :(得分:7)
这就是你错过的......
而不是简单地做s.ToString()
,执行此操作:
XmlWriter writer;
int count=0;
foreach (XmlSchema s in schemaSet.Schemas())
{
writer = XmlWriter.Create((count++).ToString()+"_contosobooks.xsd");
s.Write(writer);
writer.Close();
Console.WriteLine("Done " + count);
}
reader.Close();
然后,您可以编写适当的逻辑来更优雅地读/写,读取许多xml文件并创建相应的xsd文件等。
我从这里拿走了contosobooks.xml: https://code.google.com/p/code4cs/source/browse/trunk/AppCase/dNet/Xml/data/contosoBooks.xml?spec=svn135&r=135
,输出xsd为:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 2 :(得分:0)
使用命令行工具xsd.exe
使用示例:
nameOf.xsd /c /n:yourNamespace /out:C:\path\to\save
/ c参数创建一个类(与/ dataset相反,它创建一个强类型的DataSet)
您通常可以在以下位置找到:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin
然后使用批处理文件或Powershell创建所有150个类。
答案 3 :(得分:0)
我使用此命令行:
Administrator:Developer Command Prompt for VS2013
从xml创建xsd文件:
xsd FullFilePath.xml /outputdir:myOutputDir
生成对象以在项目中表示该xsd文件。
xsd /c /n:myNameSpace FullPath\fileName.xsd
然后它将告诉.cs文件的创建位置。
答案 4 :(得分:0)
非常容易地下载Microsoft Visual Studio 2010或2012。只需在.xml文件上单击鼠标右键,然后选择microsft visual studio,然后您将看到xml选项卡,然后单击xml模式。它将生成xsd,并将其保存到本地。