在Code中从XML创建XSD

时间:2014-04-03 11:09:47

标签: c# xml xsd

我正在使用MSDN中的这段代码从XML

创建XSD
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,因此需要一个编程选项。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:14)

xsd.exe可以做你想做的事:

  

如果指定XML文件(扩展名为.xml),则Xsd.exe会推断架构   从文件中的数据生成XSD架构。输出文件   与XML文件同名,但扩展名为.xsd。

以下命令从myFile.xml生成XML架构并将其保存到指定目录。

xsd myFile.xml /outputdir:myOutputDir

您可以详细了解herehere

您可以通过编程方式尝试:

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,并将其保存到本地。