Читаем C# для профессионалов. Том II онлайн бесплатно


C# для профессионалов. Том II

C# для профессионаловПлатформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.Основные темы книги• Все особенности языка C#• C# и объектно-ориентированное программирование• Приложения и службы Windows• Создание web-страниц и web-служб с помощью ASP NET• Сборки .NET• Доступ к данным при помощи ADO NET• Создание распределённых приложений с помощью NET Remoting• Интеграция с COM, COM+ и службой Active Directory

Крейг Макквин , Джерод Моемека , Кристиан Нагель , Морган Скиннер , Карли Ватсон

Компьютеры и Интернет / Программирование / Книги по IT
<p>C# для профессионалов</p><p>Том II </p><p>Глава 13</p><p><emphasis>XML</emphasis></p>

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.

<p>Стандарты W3C</p>

Консорциум 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.

<p>Пространство имен System.Xml</p>

Рассмотрим (без определенного порядка) некоторые классы пространства имен 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 и схемные ссылки. Используется также для обработки элементов и .
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++ и т.д.

<p>XML 3.0 (MSXML3.DLL) в C#</p>

Как быть, если имеется большой объем кода, разработанного с помощью синтаксического анализатора компании 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 выглядит следующим образом:

 

  The Autobiography of Benjamin Franklin

 

   Benjamin

   Franklin

  

  8.99

 

 

  The Confidence Man

  

   Herman

   Melville

  

  11.99

 

  

  The Gorgias

  

   Plato

  

  9.99

 

Рассмотрим пример кода, использующего 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;

 ///

 /// Краткое описание Form1.

 ///

 public class Form1 : System.Windows.Forms.Form {

  private System.Windows.Forms.ListBox listBox1;

  private System.Windows.Forms.Button button1;

  ///

  /// Необходимая для Designer переменная.

  ///

  private System.ComponentModel.Container components;

Затем объявляется документ DOM на уровне модуля:

  private DOMDocument30 doc;

  public Form1 {

   //

   // Требуется для поддержки Windows Form Designer

   //

   InitializeComponent;

   //

   // TODO: Добавьте любой код конструктора после вызова

   // InitializeComponent

   //

  }

  /// 

  /// Очистить все использованные ресурсы.

  ///

  public override void Disposed {

   base.Dispose;

   if (components != null) components.Dispose;

  }

#region Windows Form Designer создает код

  ///

  /// Необходимый для поддержки Designer метод — не изменяйте

  /// содержимое этого метода редактором кода.

  ///

  private void InitializeComponent {

   this.listBox1 = new System.Windows.Forms.ListBox;

   this.button1 = new System.Windows.Forms.Button;

   this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Top |

    System.Windows.Forms.AnchorStyles.Left) |

    System.Windows.Forms.AnchorStyles.Right);

   this.listBox1.Size = new System.Drawing.Size(336, 238);

   this.listBox1.TabIndex = 0;

   this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);

   this.button1.Anchor = System.Windows.Forms.AnchorStyles.Bottom;

   this.button1.Location = new System.Drawing.Point(136, 264);

   this.button1.TabIndex = 1;

   this.button1.Text = "button1";

   this.button1.Click += new System.EventHandler(this.button1_Click);

   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

   this.ClientSize = new System.Drawing.Size(339, 320);

   this.Controls.AddRange(new System.Windows.Forms.Control[]{this.button1, this.listBox1});

   this.Text = "Form1";

  }

#endregion

Похожие книги