XML в MS SQL Server 2000 и технологиях доступа к данным - Получить как поток XML

ОГЛАВЛЕНИЕ

Получить как поток XML

В рассмотренном примере XML передавался от ADO к DOM через внешний файл. В ADO 2.5 появилась возможность сохранения recordset'a в виде XML не только в файл, но и в любой объект, поддерживающий интерфейс IStream. В Скрипте 2

static void Save_ADODBRecordset_XMLStream()
{
...
   MSXML2.DOMDocument40Class xmlDoc = new MSXML2.DOMDocument40Class();
   rst.Save(xmlDoc, ADODB.PersistFormatEnum.adPersistXML);
   cnn.Close();
   MSXML2.DOMDocument40Class xslDoc = new MSXML2.DOMDocument40Class();
   xslDoc.loadXML("<?xml version='1.0' ?>" +
      "<doc xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xsl:version='1.0'>" +
      "<xsl:copy-of select='//*[@ContactName=\"Maria Larsson\"]'/></doc>");
   FileInfo f = new FileInfo("..\\Results\\ADODBRecordset_XMLStream.xml");
   StreamWriter sw = f.CreateText();
   sw.Write(xmlDoc.transformNode(xslDoc));
   sw.Close();
...
}
Скрипт 2

recordset записывается в поток объекта DOMDocument из СОМовской библиотеки MSXML4 (WINNT\System32\msxml4.dll). Полученный из recordset'a xmlDoc затем подвергается XSLT-преобразованию, заданному в xslDoc, которое выбирает все элементы, относящиеся к заказчику Maria Larsson. Полученная в результате преобразования строка записывается в файл, который отображается в браузере.
Возможна и обратная ситуация - чтение XML из потока и его запись в recordset. Это было достигнуто за счет введения нового сервисного провайдера Microsoft OLE DB Persistence Provider ("Provider=MSPersist"). Простота сохранения recordset'a в XML накладывает в то же время ограничения: ADO жестко задает схему генерируемого документа (см. еще раз рис.1). Это плоский XML. Несмотря на отношения между таблицами, названия элементов не несут никакой информации о самих таблицах, ограничиваясь безликим , и т.д., так что для внятного отображения, скорее всего, требуется XSL-преобразование.