写入数据集内容作为 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 输出中编写该列。 |