XML в MS SQL Server 2000 и технологиях доступа к данным Страница 3. Получить как поток XML
|
Страница 3 из 15
Получить как поток 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='https://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-преобразование. |