在 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 表示形式时,其中包含DataRelation对象,很可能希望生成的 XML 在每个关系的父元素中嵌套相应的子行。 若要实现此目的,请在将DataRelation添加到DataSet时,将DataRelation的Nested属性设置为true。 有关详细信息,请参阅 嵌套数据关系。
下面是如何将 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 属性的不同 MappingType 值,以及生成的 XML。
| MappingType 值 | DESCRIPTION |
|---|---|
| 元素 | 这是默认值。 该列将写入 XML 元素,其中 ColumnName 是元素的名称,列的内容将作为元素的文本写入。 例如:<ColumnName>Column Contents</ColumnName> |
| 属性 | 该列将作为当前行的 XML 元素的属性写入,其中 ColumnName 是属性的名称,列的内容作为该属性的值写入。 例如:<RowElement ColumnName="Column Contents" /> |
| SimpleContent | 列的内容将作为文本写入当前行的 XML 元素中。 例如:<RowElement>Column Contents</RowElement>请注意, SimpleContent 不能为具有 Element 列或嵌套关系的表的列设置。 |
| 隐 | 该列不是在 XML 输出中写入的。 |