簡體   English   中英

在代碼中從 XML 創建 XSD

[英]Create XSD from XML in Code

我正在使用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 以創建架構時,它會正確顯示。 但是,我有超過 150 個 xml 文檔需要創建 XSD,因此需要一個編程選項。 任何人都可以幫忙嗎?

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();
    }
}

這就是你所缺少的......而不是簡單地做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>

下載 microsoft visual studio 2010 或 2012.its 非常容易。 只需右鍵單擊 .xml 文件,然后選擇 microsft Visual Studio,然后您將看到 xml 選項卡,然后單擊 xml schema。 它將生成 xsd,將其保存到您的本地。

使用命令行工具xsd.exe

用法示例:

nameOf.xsd /c /n:yourNamespace /out:C:\\path\\to\\save

/c 參數創建一個類(與創建強類型數據集的 /dataset 相反)

您通常可以在以下位置找到它:C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\bin

然后使用批處理文件或 Powershell 創建所有 150 個類。

我使用這個命令行:

Administrator:Developer Command Prompt for VS2013

從 xml 創建 xsd 文件:

xsd FullFilePath.xml /outputdir:myOutputDir

生成對象來表示我們項目中的那個 xsd 文件。

xsd /c /n:myNameSpace FullPath\fileName.xsd

然后它會告訴在哪里創建 .cs 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM