📜  从 xml 生成 xsd (1)

📅  最后修改于: 2023-12-03 15:36:15.343000             🧑  作者: Mango

从 XML 生成 XSD

XML 作为一种可扩展标记语言,便于数据的存储和交换,同时也方便数据的分析与应用。但是,当我们需要使用 XML 数据时,往往需要对其进行有效性验证,以保证数据一致性和合法性。这时候,XML Schema(XSD)就派上用场了,它是一种用于描述和验证 XML 文档结构、内容和数据类型的语言。

在本篇文章中,我们将介绍如何从 XML 文件中生成 XSD 文件,在项目中使用 XSD 文件对 XML 数据进行验证。

代码示例

我们可以使用以下代码来实现从 XML 文件生成 XSD 文件的功能:

using System.Xml;
using System.Xml.Schema;

public static void GenerateXsd(string xmlFilePath, string xsdFilePath)
{
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load(xmlFilePath);

    XmlSchemaSet schemaSet = new XmlSchemaSet();
    XmlSchemaInference schemaInference = new XmlSchemaInference();
    schemaInference.InferSchema(xmlDocument, schemaSet);

    XmlWriterSettings writerSettings = new XmlWriterSettings
    {
        Indent = true
    };

    using (XmlWriter writer = XmlWriter.Create(xsdFilePath, writerSettings))
    {
        XmlSchema schema = schemaSet.Schemas().Count > 0 ? schemaSet.Schemas()[0] : null;
        schema?.Write(writer);
    }
}

该方法接受两个参数,xmlFilePath 表示 XML 文件的路径,xsdFilePath 表示生成的 XSD 文件的路径。首先,我们使用 XmlDocument 加载 XML 文件。然后,我们初始化 XmlSchemaSetXmlSchemaInference 对象,通过 InferSchema 方法从 xmlDocument 推断出 XSD 结构,最后使用 XmlWriter 将 XSD 文件写入到 xsdFilePath 文件中。

运行示例

接下来,我们使用以下 XML 文件进行测试:

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <Book>
    <Title>ASP.NET Core in Action</Title>
    <Author>Andrew Lock</Author>
    <Price>39.99</Price>
  </Book>
  <Book>
    <Title>CSS Mastery: Advanced Web Standards Solutions (CSS Mastery)</Title>
    <Author>Simon Collison</Author>
    <Price>25.19</Price>
  </Book>
</Books>

运行以下代码,输出 books.xsd 文件:

GenerateXsd("books.xml", "books.xsd");

运行完毕后,可以在项目的根目录下找到 books.xsd 文件,文件内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Books">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Book" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Title" type="xs:string" />
              <xs:element name="Author" type="xs:string" />
              <xs:element name="Price" type="xs:double" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

可以看到,通过推断,该 XML 文件的 XSD 结构已经被正确生成。

总结

通过本文,我们介绍了如何从 XML 文件中生成 XSD 文件,为 XML 数据验证提供了便利。同时,我们也学习了使用 XmlSchemaInference 类从 XML 文件中推断出 XSD 结构的方法。希望本文对您有所帮助!