将数据集内容编写为 XML 数据

在 ADO.NET 可以编写包含或不带架构的 DataSetXML 表示形式。 如果架构信息与 XML 内联包含,则使用 XML 架构定义语言 (XSD) 编写该信息。 架构包含表定义 DataSet 以及关系和约束定义。

当将 DataSet 写入为 XML 数据时,DataSet 中的行会以其当前版本写入。 但是, DataSet 也可以编写为 DiffGram,以便包含行的当前值和原始值。

XML 表示形式 DataSet 可以写入文件、流、 XmlWriter 或字符串。 这些选项为传输 XML 表示形式 DataSet提供了极大的灵活性。 若要获取作为字符串的 DataSet XML 表示形式,请使用 GetXml 方法,如以下示例所示。

Dim xmlDS As String = custDS.GetXml()  
string xmlDS = custDS.GetXml();  

GetXml 返回不带架构信息的 XML 表示形式 DataSet 。 若要将架构信息从 DataSet (作为 XML 架构)写入字符串,请使用 GetXmlSchema

若要将 DataSet 写入文件、流或 XmlWriter,请使用 WriteXml 方法。 传递给 WriteXml 的第一个参数是 XML 输出的目标。 例如,传递包含文件名、 System.IO.TextWriter 对象等的字符串。 可以传递 XmlWriteMode 的可选第二个参数,以指定 XML 输出的写入方式。

下表显示了 XmlWriteMode 的选项。

XmlWriteMode 选项 DESCRIPTION
IgnoreSchema 以 XML 数据形式编写 DataSet 的当前内容,不包含 XML 架构。 这是默认值。
WriteSchema 以 XML 数据形式编写 DataSet 的当前内容,以关系结构作为内联 XML 架构。
DiffGram 将整个 DataSet 写入 DiffGram,包括原始值和当前值。 有关详细信息,请参阅 DiffGrams

编写包含 DataSet 对象的 XML 表示形式时,你很可能希望生成的 XML 将每个关系子行嵌套在其相关父元素中。 为此,请将 DataRelation嵌套属性设置为 true,当您将 DataRelation 添加到 DataSet 时。 有关详细信息,请参阅 嵌套数据关系

下面是如何将 XML DataSet 表示形式写入文件的两个示例。 第一个示例将生成的 XML 的文件名作为字符串传递给 WriteXml。 第二个示例传递 System.IO.StreamWriter 对象。

custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema)  
custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema);  
Dim xmlSW As System.IO.StreamWriter = New System.IO.StreamWriter("Customers.xml")  
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema)  
xmlSW.Close()  
System.IO.StreamWriter xmlSW = new System.IO.StreamWriter("Customers.xml");  
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema);  
xmlSW.Close();  

将列映射到 XML 元素、属性和文本

可以使用 DataColumn 对象的 ColumnMapping 属性指定如何在 XML 中表示表的列。 下表显示了表列的 ColumnMapping 属性和生成的 XML 的不同 MappingType 值。

MappingType 值 DESCRIPTION
元素 这是默认值。 该列将写入 XML 元素,其中 ColumnName 是元素的名称,列的内容将作为元素的文本写入。 例如:

<ColumnName>Column Contents</ColumnName>
属性 该列将作为当前行的 XML 元素的属性写入,其中 ColumnName 是属性的名称,列的内容作为该属性的值写入。 例如:

<RowElement ColumnName="Column Contents" />
SimpleContent 列的内容将作为文本写入当前行的 XML 元素中。 例如:

<RowElement>Column Contents</RowElement>

请注意,不能为具有元素列或嵌套关系的表的列设置 SimpleContent
该列不是在 XML 输出中写入的。

另请参阅