如何使用自定义 XSD 架构编写 XML?
Posted
技术标签:
【中文标题】如何使用自定义 XSD 架构编写 XML?【英文标题】:How do I write an XML using a custom XSD schema? 【发布时间】:2021-07-17 00:52:03 【问题描述】:这可能很简单,但对于我的一生,我一直无法弄清楚。我是架构的新手,所以这绝对是我的问题的一部分。
我有一个 C# 程序,它从数据库中提取表并将这些表添加到数据表,然后添加到数据集。从那里,我使用 WriteXml(fileName) 来生成 XML。我已经能够从生成的 XML 创建 XSD,然后根据我希望 XML 输出的外观进行一些更改。
如何使用我创建的自定义 XSD 来正确格式化 XML?非常感谢任何图书馆或任何形式的建议。
以下是我用来编写 xml 的代码。
public static void WriteXml(string filePath, string projectType)
List<string> tableNames = GetAllTableNames();
try
string connectionString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
SqlConnection con;
SqlDataAdapter sda;
DataTable dt;
DataSet ds = new DataSet(projectType);
using (con = new SqlConnection(connectionString))
con.Open();
foreach (string table in tableNames)
using (var cmd_selectAllFromTable = new SqlCommand())
cmd_selectAllFromTable.Connection = con;
cmd_selectAllFromTable.CommandType = CommandType.Text;
cmd_selectAllFromTable.CommandText = "SELECT * FROM " + table;
dt = new DataTable(table);
sda = new SqlDataAdapter(cmd_selectAllFromTable);
sda.Fill(dt);
ds.Tables.Add(dt);
con.Close();
ds.WriteXml(filePath);
catch (Exception ex)
Console.WriteLine(ex.Message);
下面是架构。我已经包含了第一个元素的外观,然后会有更多元素。我想要的是我生成的 XML 遵循 XSD(如下)并按我想要的顺序创建元素。
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Program">
<xs:complexType>
<xs:sequence>
<xs:element name="Project">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:string" />
<xs:element name="Name" type="xs:string" />
<xs:element name="Field1" type="xs:string" />
<xs:element name="Field2" type="xs:string" />
<xs:element name="Field3" type="xs:dateTime" />
<xs:element name="Field4" type="xs:string" />
<xs:element name="Field5" type="xs:string" />
<xs:element name="Field6" type="xs:string" />
<xs:element name="Field7" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
【问题讨论】:
【参考方案1】:XSD 定义了验证 XML 文档的结构规则,它没有定义它是如何被格式化的。格式化通常使用 XSLT 完成。
(您可以编写模式感知 XSLT 代码,这有助于优化和调试,但大多数人不这样做)。
【讨论】:
以上是关于如何使用自定义 XSD 架构编写 XML?的主要内容,如果未能解决你的问题,请参考以下文章