Симон Робинсон - C# для профессионалов. Том II
Обзор книги Симон Робинсон - C# для профессионалов. Том II
C# для профессионалов
Том II
Глава 13
XML
XML играет очень большую роль в платформе .NET. Платформа не только позволяет использовать XML в приложениях, но сама применяет XML для таких вещей, как конфигурационные файлы и документация исходного кода. Для XML платформа .NET содержит пространство имен System.Xml. Это пространство имен загружается вместе с классами, задействованными при обработке XML.
В этой главе говорится о том, как использовать реализацию DOM, и что предлагает .NET в качестве замены SAX. Будет показана совместная работа XML и ADO.NET и их преобразования. Мы узнаем так же, как можно сериализовать объекты в документ XML и создать объект из документа XML (десериализовать). Кроме того увидим, как включать XML в приложения C#. Следующие классы будут рассмотрены более подробно:
□ XmlReader и XmlTextReader
□ XmlWriter и XmlTextWriter
□ XmlDocument и DOM
□ XPath и XslTransform
□ ADO.NET и XmlDataDocument
□ XmlSerialization
Начнем эту главу с текущего состояния стандартов XML.
Стандарты W3C
Консорциум WWW (W3C) разработал множество стандартов, придающих XML мощь и потенциал. Без этих стандартов XML не смог бы оказать такого большого влияния на мир разработки. В этой книге не будут подробно рассматриваться тонкости XML. Для этого необходимо использовать другие источники. Среди книг Wrox, переведенных издательством "Лори", можно порекомендовать "Введение в XML" (2001 г., 656 стр.), "XML для профессионалов" (2001 г., 896 стр.) и "The XML Handbook" (ISBN 0-13-055068). Конечно, web-сайт W3C является ценным источником информации о XML (www.w3.org). В мае 2001 г. платформа .NET поддерживала следующие стандарты:
□ XML 1.0 — www.w3.org/TR/1998/REC-XML-19980210 — включая поддержку DTD (XmlTextReader).
□ Пространства имен XML — www.w3.org/TR/REC-xml-names — уровень потока и DOM.
□ Схемы XML — www.w3.org/TR/xmlschema-1 — поддерживается отображение схем и сериализация, но пока еще не поддерживается проверка.
□ Выражения XPath — www.w3.org/TR/xpath
□ Преобразования XSL/T — www.w3.org/TR/xslt
□ Ядро DOM Level 2 — www.w3.org/TR/DOM-Level-2
□ Soap 1.1 — msdn.microsoft.com/xml/general/soapspec.asp
Уровень поддержки стандартов будет меняться по мере развития платформы и по мере того, как W3C продолжает обновлять рекомендованные стандарты. В связи с этим необходимо всегда оставаться на современном уровне стандартов и уровне поддержки, который обеспечивает Microsoft.
Пространство имен System.Xml
Рассмотрим (без определенного порядка) некоторые классы пространства имен System.Xml.
Имя класса Описание XmlReader Абстрактный. Средство чтения, которое предоставляет быстрый, некэшированный доступ к данным XML. XmlReader читает только вперед, аналогично синтаксическому анализатору SAX. XmlWriter Абстрактный. Средство записи, которое предоставляет быструю, некэшированную запись данных XML в поток или файл. XmlTextReader Реализует XmlReader. Предоставляет быстрый потоковый доступ для чтения с режимом только вперед к данным XML. Разрешает (допускает) использование данных в одном представлении. XmlTextWriter Реализует XmlWriter. Быстрая генерация потоков записи XML с режимом только вперед. XmlNode Абстрактный. Класс, который представляет единичный узел в документе XML. Базовый класс для нескольких классов в пространстве имен XML. XmlDocument Реализует XmlNode. Объектная модель документов W3C (DOM, Document Object Model). Задает в памяти представление документа XML в виде дерева, разрешая перемещение и редактирование. XmlDataDocument Реализует XmlDocument. То есть документ, который можно загрузить из данных XML или из реляционных данных объекта DataSet из ADO.NET. XmlResolver Абстрактный. Разрешает внешние ресурсы на основе XML, такие как DTD и схемные ссылки. Используется также для обработки элементов <xsl:include> и <xsl:import>. XmlUrlResolver Реализует XmlResolver. Разрешает внешние ресурсы с помощью URI (унифицированный идентификатор ресурса).XML является также частью пространства имен System.Data в классе DataSet.
Имя класса Описание ReadXml Считывает данные XML и схему в DataSet. ReadXmlSchema Считывает схему XML в DataSet. WriteXml Переписывает XML и схему из DataSet в документ XML. WriteXmlSchema Переписывает схему из DataSet в документ XML.Необходимо отметить, что эта книга посвящена языку C#, поэтому все примеры будут написаны на C#. Однако пространство имен XML доступно в любом языке, который является частью семейства .NET. Это означает, что все приведенные примеры могли быть также написаны на языках VB.NET, Управляемый C++ и т.д.
XML 3.0 (MSXML3.DLL) в C#
Как быть, если имеется большой объем кода, разработанного с помощью синтаксического анализатора компании Microsoft (в настоящее время XML 3.0)? Придется ли его выбросить и начать все сначала? А что если вам удобно использовать объектную модель XML 3.0 DOM? Нужно ли немедленно переключаться на .NET?
Ответом будет — нет. XML 3.0 может использоваться непосредственно в приложениях. Если добавить ссылку на msxml3.DLL в свое решение, то можно будет начать писать некоторый код.
Следующие несколько примеров будут использовать файл books.xml в качестве источника данных. Его можно загрузить с web-сайта издательства Wrox, он также включен в несколько примеров .NET SDK. Файл books.xml является каталогом книг воображаемого книжного склада. Он содержит такую информацию, как жанр, имя автора, цена и номер ISBN. Все примеры кода в этой главе также доступны на web-сайте издательства Wrox: www.wrox.com. Чтобы выполнить эти примеры, файлы данных XML должны находиться в структуре путей, которая выглядит примерно следующим образом:
/XMLChapter/Sample1
/XMLChapter/Sample2
/XMLChapter/Sample3
и т. д. Файлы XML должны находиться в подкаталоге XMLChapter, а код для примеров должен быть в подкаталогах Sample1, Sample2 и т.д. Можно называть каталоги как угодно, но их относительное положение важно. Можно также изменять примеры, чтобы указать желаемое направление. В коде примеров будут сделаны указания, какие строки изменить.
Файл books.xml выглядит следующим образом:
<?xml version='1.0'?>
<!-- Этот файл представляет фрагмент базы данных учета запасов книжного склада -->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Рассмотрим пример кода, использующего MSXML 3.0 для загрузки окна списка с номерами ISBN из books.xml. Ниже записан код, который можно найти в папке SampleBase1 архива, загружаемого с web-сайта издательства Wrox. Можно скопировать его в Visual Studio IDE или создать новую форму Windows Form с самого начала. Эта форма содержит элементы управления listbox и button. Оба элемента используют имена по умолчанию listBox1 и button1:
namespace SampleBase {
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
Затем включается пространство имен для ссылки на msxml3.dll. Помните, что ссылку на эту библиотеку необходимо включать в проект (ее можно найти на вкладке COM диалогового окна Add Reference).
using MSXML2;
/// <summary>
/// Краткое описание Form1.
/// </summary>