Запись содержимого DataSet в виде XML-данных (ADO.NET)
В ADO.NET можно записать XML-представление объекта DataSet вместе со схемой или без нее. Если информация схемы встраивается внутрь XML, она записываются на языке XSD. Схема содержит определения таблиц для DataSet, а также определения связей и ограничений.
Если DataSet записан как XML-данные, строки в DataSet записываются в своей текущей версии. Однако DataSet может быть записан как DiffGram, так что будут включены и текущие, и исходные данные строк.
XML-представление для DataSet может быть записано в файл, в поток, в XmlWriter или в строку. Эти возможности обеспечивают большую гибкость способа переноса XML-представления для DataSet. Чтобы получить XML-представление для DataSet как строку, используется метод 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 |
Описание |
---|---|
IgnoreSchema |
Записывает текущее содержимое DataSet как XML-данные, без схемы XML. Это значение по умолчанию. |
WriteSchema |
Записывает текущее содержимое DataSet в виде XML-данных с реляционной структурой в виде встроенной схемы XML. |
DiffGram |
Записывает весь DataSet как DiffGram, включая исходные и текущие значения. Дополнительные сведения см. в разделе Объекты DiffGram (ADO.NET). |
При записи XML-представления объекта DataSet, который содержит объекты DataRelation, скорее всего, будет необходимо, чтобы в результирующем XML-коде дочерние строки для каждой связи были вложены в связанные с ними родительские элементы. Для этого установите для свойства Nested объекта DataRelation значение true, когда DataRelation добавляется в DataSet. Дополнительные сведения см. в разделе Вложенность объектов DataRelation (ADO.NET).
Далее даются два примера того, как записать в файл 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-элементами, атрибутами и текстом
С помощью свойства ColumnMapping объекта DataColumn можно задать, как столбец таблицы представляется в XML-коде. В следующей таблице показаны различные значения MappingType для свойства ColumnMapping столбца таблицы, а также получающийся в результате XML-код.
Значение MappingType |
Описание |
---|---|
Element |
Это значение по умолчанию. Столбец записывается как XML-элемент, где ColumnName — имя элемента, а содержимое столбца записывается как текст элемента. Например:
|
Attribute |
Столбец записывается как XML-атрибут XML-элемента для текущей строки, где ColumnName — это имя атрибута, а содержимое столбца записывается как значение атрибута. Например:
|
SimpleContent |
Содержимое столбца записывается как текст в XML-элементе для текущей строки. Например:
Следует отметить, что SimpleContent нельзя установить для столбца таблицы, имеющей столбцы Element или вложенные связи. |
Hidden |
Столбец не записывается в выводимый XML. |
См. также
Основные понятия
Вложенность объектов DataRelation (ADO.NET)
Запись сведений схемы DataSet в виде XSD (ADO.NET)