如何使用自定义XSD模式编写XML



这可能很简单,但就我的一生而言,我一直没能弄清楚。我是模式的新手,所以这肯定是我问题的一部分。

我有一个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>
XSD定义了用于验证XML文档的结构规则,但没有定义如何格式化。格式化通常使用XSLT完成。

(您可以编写模式感知的XSLT代码,这可以帮助优化和调试,但大多数人没有(。

最新更新