Симон Робинсон - C# для профессионалов. Том II Страница 2

Тут можно читать бесплатно Симон Робинсон - C# для профессионалов. Том II. Жанр: Компьютеры и Интернет / Программирование, год -. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте «WorldBooks (МирКниг)» или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Симон Робинсон - C# для профессионалов. Том II

Симон Робинсон - 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

Симон Робинсон - C# для профессионалов. Том II читать онлайн бесплатно

Симон Робинсон - C# для профессионалов. Том II - читать книгу онлайн бесплатно, автор Симон Робинсон

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

  private System.Windows.Forms.ListBox listBox1;

  private System.Windows.Forms.Button button1;

  /// <summary>

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

  /// </summary>

  private System.ComponentModel.Container components;

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

  private DOMDocument30 doc;

  public Form1() {

   //

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

   //

   InitializeComponent();

   //

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

   // InitializeComponent

   //

  }

  /// <summary>

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

  /// </summary>

  public override void Disposed {

   base.Dispose();

   if (components != null) components.Dispose();

  }

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

  /// <summary>

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

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

  /// </summary>

  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

  /// <summary>

  /// Главная точка входа для приложения.

  /// </summary>

  [STAThread]

  static void Main() {

   Application.Run(new Form1());

  }

Мы хотим взять номер ISBN из listbox и, используя простой поиск XPath, найти узел книги, который ему соответствует, и вывести текст узла (заглавие книги и цену) в MessageBox. Язык пути доступа XML (XPath) является нотацией XML, которая может использоваться для запроса и фильтрации текста в документе XML. Рассмотрим XPath в .NET позже в этой главе. Вот код обработчика событий для выбора записи в окне списка:

  protected void listBox1_SelectedIndexChanged (object sender, System.EventArgs e){

   string srch=listBox1.SelectedItem.ToString();

   IXMLDOMNode nd=doc.selectSingleNode("bookstore/book[@ISBN='" + srch + "']");

   MessageBox.Show(nd.text);

  }

Теперь мы имеем обработчик события нажатия кнопки. Сначала мы загружаем файл books.xml — обратите внимание, что если файл выполняется не в папке bin/debug или bin/release, необходимо исправить соответствующим образом путь доступа:

  protected void button1_Click(object sender, System.EventArgs e) {

   doc=new DOMDocument30();

   doc.load("..\\..\\..\\books.xml")

Следующие строки объявляют, что узлы являются nodeList узлов книг. В данном случае имеется три узла:

   IXMLDOMNodeList nodes;

   nodes = doc.selectNodes("bookstore/book");

   IXMLDOMNode node=nodes.nextNode();

Мы просматриваем узлы в цикле и добавляем текстовое значение атрибута ISBN в listBox1:

   while(node!=null) {

    listBox1.Items.Add(node.attributes.getNamedItem("ISBN").text);

    node=nodes.nextNode();

   }

  }

 }

}

Вот как выглядит пример во время выполнения:

Это изображение появляется после того, как была нажата кнопка button1 и загрузился listBox1 с номерами ISBN книг. После выбора номера ISBN будет выведено следующее:

System.Xml

Пространство имен System.Xml является мощным и относительно простым для использования, но оно отличается от модели MSXML 3.0. Если вы знакомы с MSXML 3.0, то применяйте его, пока не освоитесь с пространством имен System.Xml. Пространство имен System.Xml предлагает большую гибкость и легче расширяется.

Этот файл XML будет использоваться в примерах этой главы. Код, который только что был рассмотрен, лежит в основе нескольких примеров. В большинстве других будет показан только код, имеющий отношение к делу, и не будет повторяться то, что уже было показано.

Чтение и запись XML

Теперь посмотрим, что позволяет делать платформа .NET. Если раньше вы работали с SAX, то XmlReader и XmlWriter вам будут знакомы. Классы на основе XmlReader предоставляют быстрый курсор только для чтения вперед, который создает поток данных XML для обработки. Так как это потоковая модель, то требования к памяти не очень большие. Однако в ней отсутствует навигационная гибкость и средства чтения/записи, присущие модели DOM. Классы на основе XmlWriter будут создавать документ XML, который соответствует рекомендациям по пространствам имен XML 1.0 консорциума W3C.

XmlReader и XmlWriter являются абстрактными классами. Рисунок ниже показывает, какие классы являются производными от XmlReader и XmlWriter:

XmlTextReader и XmlTextWriter работают либо с объектами на основе потока, либо с объектами на основе TextReader или TextWriter. XmlNodeReader использует XmlNode вместо потока в качестве своего источника. XmlValidatingReader добавляет DTD и проверку схем и поэтому предлагает проверку данных. Мы рассмотрим это подробнее позже в этой главе.

XmlTextReader

XmlTextReader похож на SAX. Одно из различий заключается в том, что SAX является моделью типа рассылки (push), т.е. посылает данные приложению и разработчик должен быть готов принять их, a XmlTextReader применяет модель запроса (pull), где данные посылаются приложению, которое их запрашивает. Это предоставляет более простую и интуитивно понятную модель для программирования. Другое преимущество состоит в том, что модель запроса может быть избирательной в отношении данных, посылаемых приложению. Если нужны не все данные, то их не нужно обрабатывать. В модели рассылки все данные XML должны быть обработаны приложением, нужны они ему или нет.

Возьмем простой пример считывания данных XML, и затем более внимательно рассмотрим класс XmlTextReader. Код можно найти в папке XmlReaderSample1. Можно заменить метод button1_Click в предыдущем примере на следующий код. Эту версию данного кода можно найти в папке SampleBase2 загруженного архива кода. Не забудьте изменить:

using MSXML2;

на

using System.Xml;

Мы должны это сделать, поскольку используем теперь не MSXML 3.0, а пространство имен System.Xml. Нужно также удалить метод listBox1_SelectedIndexChanged, так как он включает в себя некоторые неподдерживаемые методы и строку:

private DOMDocument30 doc;

protected void button1_Click(object sender, System.EventArgs e) {

 // Измените этот путь доступа, чтобы найти books.xml

 string fileName = "..\\..\\..\\books.xml";

 // Создать новый объект TextReader

 XmlTextReader tr = new XmlTextReader(fileName);

 // Прочитать узел за раз

 while(tr.Read()) {

  if (tr.NodeType == XmlNodeType.Text) listBox1.Items.Add(tr.Value);

 }

}

Это XmlTextReader в простейшей форме. Сначала создается строковый объект fileName с именем файла XML. Затем создается новый объект XmlTextReader, передавая в качестве параметра строку fileName.XmlTextReader в настоящее время имеет 13 различных перегружаемых конструкторов, которые получают различные комбинации строк (имен файлов и URL), потоков и таблиц имен. После инициализации объекта XmlTextReader ни один узел не выбран. Это единственный момент, когда узел не является текущим. Когда мы начинаем цикл tr.Read, первая операция чтения Read переместит нас в первый узел документа. Обычно это бывает узел Declaration XML. В этом примере при переходе к каждому узлу tr.NodeType сравнивается с перечислением XmlNodeType, и когда встречается текстовый узел, значение текста добавляется в listbox. Вот экран после того, как было загружено окно списка:

Существует несколько способов перемещения по документу. Как мы только что видели, Read перемещает нас к следующему узлу. Затем можно проверить, имеет ли узел значение (HasValue) или, как мы скоро увидим, имеет ли узел атрибуты (HasAttributes). Существует метод ReadStartElement, который проверяет, является ли текущий узел начальным элементом, и затем перемешает текущую позицию к следующему узлу. Если текущая позиция не является начальным элементом, то порождается исключение XmlException. Этот метод совпадает с вызовом метода IsStartElement, за которым следует метод Read.

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.