* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Применение класса XmlDataDocument
8 февраля 2009
Конструкция класса XmlDataDocument позволяет ему работать с объектом DataSet напрямую. Класс XmlDataDocument является представлением XML-данных в памя- ти подобно тому, как объект DataSet представляет в памяти обычные данные. Уп- равление данными, загруженными в XmlDataDocument, построено на основе объек- тной модели документа W3C Document Object Model (DOM), а объект XmlData- Document способен выполнять роль источника данных для преобразований XSL. Примечание Манипулирование документами XML не входит в тему этого учебного курса, кроме того, подробный рассказ занял бы несколько глав, поэтому мы огра- ничимся основами применения класса XmiData Document.
С каждым объектом XmlDataDocument связан объект DataSet. При создании объекта XmlDataDocument следует передать конструктору ссылку на существующий объект DataSet как параметр: Visual Basic .NET Dim myDocument As New Xml.XmlDataDocument(myDataSet) Visual C# XmlDataDocument myDocument = new XtnlDataDocument(myDataSet); В результате создается объект XmlDataDocument, синхронизированный с задан- ным объектом DataSet. При этом данные и схема DataSet автоматически считыва- ются в XmlDataDocument. При внесении любых изменений в один объект, другой объект обновляется автоматически. ^ Как создать объект XmlDataDocument из существующего объекта DataSet Передайте конструктору класса XmiData Document ссылку на существующий объект DataSet — его данные и схема будут загружены в новый объект XmlDataDocument. Объект XmlDataDocument можно также создать, не указывая существующий объект DataSet. Visual Basic .NET Dim myDocument As New Xml.XmlDataDocument() Visual C# Xnil Oat a Document myDocurnent - new XmlDataOocumentO; В этом случае создается пустой объект DataSetn связывается с объектом Хт!Data- Document, В обоих случаях DataSet, связанный с заданным объектом XmlDataDocument, доступен через свойство Xml Data Document, DataSet. Объект Xml Data Document можно заполнить данными в формате XML, взятыми из XML-файла или потока, объекта XmlReader или XML-документа, прочитанного при помощи TextReader. Чтобы загрузить XML-данные в объект XmlDataDocument и синхронизировать их с заданным объектом DataSet, прежде всего необходимо выз- вать метод ReadXmlSchema объекта DataSet, указав источник XML-схемы. Заданная схема должна совпадать со структурой источника данных XML; обычно данные и схему извлекают из одного и того же источника XML. Далее следует вызвать метод Load объекта Xml Data Document., чтобы загрузить XML-данные в память. Вот как за- грузить XML-данные из файла myXml.xml в объект Xmi Data Document. Visual Basic .NET Dim myDocurnent As New Xml.XmlDataDocument() myDocurnent. DataSet. ReadXmlSchema ("C: \myXml. xml") myDocument. Loacf("C:\myXml. xnil") Visual C# XmlDataDocument myDocurnent = new XrnlDataDocument(); inyDocument. DataSet. ReadXmlSchema ("C: \\myXml. xml"); myDocurnent. Load("C:\\myXml. xml"); >• Как заполнить объект XmlDataDocument данными из источника XML 1. Создайте экземпляр класса XmlDataDocument при помощи конструктора без па- раметров: Visual Basic .NET Dim rnyDocument As New Xml.XmlDataDocumentf) Visual C# XmlDataDocument myDocument = new XmlDataDocumentf); 2. Вызовите метод ReadXmlSchema связанного объекта DataSet, чтобы загрузить в него XML-схему: Visual Basic .NET myDocument. DataSet.ReadXmlSchema("C:\rnyXml.xml") Visual C# myDocument.DataSet.ReadXmlSchema("C:\\myXml.xml"); 3. Вызовите метод XmlDataDocument.Load, чтобы загрузить данные XML: Visual Basic .NET rnyDocument. Load (" С: \myXrnl. xrnl") Visual C# myDocurnent. Load("C:\\rriyXml.xml"); Преобразования XSL Язык XSL создан для преобразования XML-данных в другие форматы. Например, XML-файл — в HTML-документ, пригодный для отображения на Web-странице, либо в другой XML-формат, необходимый некоему приложению. .NET Framework предоставляет класс XslTransform. выполняющий преобразова- ния XSL. Чтобы выполнить преобразование, сначала следует загрузить в объект XslTransform таблицу стилей — файл с правилами форматирования XML-данных. Для загрузки таблицы стилей служит метод XslTransform.Load. Таблицу стилей мож- но задать с помощью URL, указывающего на XSL-файл с определениями стилей, либо как список произвольного числа классов, представляющих таблицу стилей, загруженную в память. Следующий пример кода объявляет новый объект XslTransform и загружает файл таблицы стилей myStyle.xsl: Visual Basic .NET Dim myTransform as New Xml.Xsl.XslTransforrtiO myTransform.Load("C:\myStyle.xsl") Visual C# Xml.Xsl.XslTransform myTransforrn =: new Xml.Xsl.XslTransform(); myTransform. Load("C:\rnyStyle.xsl"); Загрузив таблицу стилей, выполните преобразование объекта Xml Data Document. Метод XslTransform. Transform требует три параметра. Первый из них — объект, под- лежащий преобразованию. Это может быть XmlDaiaDocument или любой другой объект, в котором реализован интерфейс IXPath Navigable. Второй параметр — эк- земпляр класса System.Xml.XsI.XsltArgumentList, он используется для хранения пара- метров, необходимых таблице стилей; если таблица стилей не требует параметров, можно передать в нем Nothing (null). Третьим параметром является целевой объект для записи результатов преобразования. Это может быть экземпляр класса Stream, Text Writer HJIVI Xml Writer. Следующий пример демонстрирует преобразование объек- та Xml Data Document с именем myDocumeni и запись результата в текстовый файл. В этом примере не используются дополнительные параметры, поэтому второй па- раметр равен Nothing (null), Visual Basic .NET Результат преобразования будет передан классу StreamWriter, который запишет его в текстовый файл. Dim myWriter As New System.10.StreamWriter("myTextFile.txt") myTransforni.Transform(myDocument, Nothing, myWriter) Visual C# // Результат преобразования будет передач классу StreanWriter. // который запишет его в текстовый файл. System.10.StreamWriter myWriter - new System.10.StreamWriter("myTextFile.txt"): myTransform.Transform(fnyDocufiient, null. myWriter): > Исполнение преобразования XSL 1. Создайте экземпляр класса System.Xmi.Xsl.Xs!Transform. 2. Загрузите XSL-таблицу стилей с помощью метола Xsl'Transform.Load. 3. Вызовите метод XslTransform. Transform, чтобы осуществить преобразование объ- екта XmlDataDocument, при этом нужно передать все параметры таблицы стилей в объекте XsltArgumentList.