写入数据集内容作为 XML 数据

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

当以 XML 数据形式编写 DataSet 时,DataSet 中的行将以它们的当前版本编写。 不过,也可以用 DiffGram 形式编写 DataSet,从而使行的当前值和原始值都将包含在内。

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

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

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

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

下表显示了 XmlWriteMode 的选项。

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

当编写包含 DataRelation 对象的 DataSet 的 XML 表示形式时,你很可能希望所生成的 XML 将每一关系的子行嵌套在它们的相关父元素中。 若要完成此任务,请在向 DataSet 添加 DataRelation 时将 DataRelation 的 Nested 属性设置为 true。 有关详细信息,请参阅嵌套 DataRelations

下面是两个说明如何将 DataSet 的 XML 表示形式写入文件的示例。 第一个示例将所生成的 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 属性的不同 MappingType 值以及所生成的 XML。

MappingType 值 说明
元素 这是默认值。 列以元素名称为 ColumnName 的 XML 元素形式编写,列的内容以元素文本形式编写。 例如:

<ColumnName>Column Contents</ColumnName>
Attribute 对于属性名称为 ColumnName 的当前行,列以 XML 元素的 XML 属性形式编写,列的内容以属性值形式编写。 例如:

<RowElement ColumnName="Column Contents" />
SimpleContent 列的内容以 XML 元素中当前行文本的形式编写。 例如:

<RowElement>Column Contents</RowElement>

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

请参阅