Интеграция XML с реляционными данными и ADO.NET

Класс XmlDataDocument является производным от класса XmlDocument и содержит XML-данные. Класс XmlDataDocument полезен тем, что он организует связь между реляционными и иерархическими данными. Этот класс XmlDocument можно привязать к объекту DataSet, после чего любые изменения их данных будут одновременно отображаться в обоих классах. Класс XmlDocument, привязанный к объекту DataSet, позволяет интегрировать XML-данные с реляционными данными, не преобразуя все данные в формат XML или в реляционный формат. Можно использовать оба формата, не ограничиваясь единым способом представления данных.

Доступность двух представлений данных дает следующие преимущества.

  • Структурированную часть XML-документа можно сопоставить с набором данных и эффективным образом хранить, индексировать и использовать в поиске.

  • В XML-данных, хранимых в реляционном формате, можно эффективно выполнять преобразования, проверку и навигацию с помощью модели курсора. Иногда в реляционных структурах эти операции выполняются более эффективно, чем для XML-данных, хранящихся в модели XmlDocument.

  • Объект DataSet может хранить часть XML-документа. Это значит, что с помощью XPath или XslTransform можно сохранять в объекте DataSet только нужные элементы и атрибуты. Это позволяет внести изменения в отфильтрованный набор данных меньшего размера, а затем передать изменения в более крупный набор данных XmlDataDocument.

Также вы можете преобразовать данные, загруженные в объект DataSet из SQL Server. Есть и еще один вариант: привязать элементы управления WinForm и WebForm, управляемые классами платформы .NET Framework, к объекту DataSet, который заполнен из потока входных XML-данных.

Помимо поддержки класса XslTransform, класс XmlDataDocument предоставляет доступ к реляционным данным для запросов XPath и проверки. Для реляционных данных, в основном, доступны все XML-службы, а реляционные средства, такие как привязка элементов управления, CodeGen и т. д., доступны с помощью структурированной проекции XML-данных без нарушения их точности.

Так как класс XmlDataDocument наследуется от класса XmlDocument, он содержит реализацию модели W3C DOM. Тот факт, что класс XmlDataDocument связан с объектом DataSet и хранит в нем часть своих данных, ни в коей мере не ограничивает и не изменяет его использование в качестве класса XmlDocument. Код, написанный для обработки событий класса XmlDocument, работает с классом XmlDataDocument без изменений. Объект DataSet обеспечивает реляционное представление тех же данных, определяя таблицы, столбцы, связи и ограничения, и является изолированным хранилищем пользовательских данных в памяти.

На рисунке ниже показаны различные связи между XML-данными, объектом DataSet и классом XmlDataDocument.

Diagram that shows different associations with the XML DataSet.

На рисунке вы видите, что XML-данные можно загрузить непосредственно в объект DataSet, что позволяет использовать реляционные методы для работы с ними. Также XML-данные можно загрузить в класс XmlDataDocument, производный от модели DOM, а затем загрузить в объект DataSet и синхронизировать. Поскольку объект DataSet и класс XmlDataDocument синхронизируются по одному набору данных, то все изменения в любом из этих хранилищ отражаются и в другом хранилище.

Класс XmlDataDocument наследует все возможности редактирования и навигации из класса XmlDocument. Бывают случаи, когда использование класса XmlDataDocument с его наследуемыми возможностями и синхронизация с объектом DataSet оказываются более предпочтительным вариантом, чем загрузка XML-данных непосредственно в объект DataSet. В следующей таблице перечислены аспекты, которые нужно учитывать при выборе метода загрузки для объекта DataSet.

Причины для загрузки XML-данных непосредственно в объект DataSet Причины для синхронизации класса XmlDataDocument с объектом DataSet
Запросы к данным в объекте DataSet проще выполнять через SQL, чем через XPath. Необходимо использовать запросы XPath к данным в объекте DataSet.
Не обязательно сохранять порядок элементов в исходном XML-коде. Важно сохранять порядок элементов в исходном XML-коде.
Не нужно сохранять пробелы между элементами и форматированием в исходном XML-коде. Важно сохранять пробелы и форматирование в исходном XML-коде.

Если непосредственная загрузка XML-данных в объект и из объекта DataSet соответствует поставленным задачам, изучите документацию о загрузке DataSet из XML и записи DataSet в виде XML.

Если нужно загружать данные в объект DataSet из класса XmlDataDocument, переходите к документу о синхронизации объекта DataSet с XML-документом.

См. также