XML в MS SQL Server 2000 и технологиях доступа к данным - Получить как поток XML
ОГЛАВЛЕНИЕ
Получить как поток XML
В рассмотренном примере XML передавался от ADO к DOM через внешний файл. В ADO 2.5 появилась возможность сохранения recordset'a в виде XML не только в файл, но и в любой объект, поддерживающий интерфейс IStream. В Скрипте 2
{
...
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();
...
}
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-преобразование.