Например, можно составить XML-документ для хранения на диске некоторых географических данных:

  <?xml version="1.0" encoding="utf-8" ?>

  South America

  Chile

  Argentina

  Asia

  Iraq

  India

Каждый XML-документ начинается с такой строки, встречая которую программа будет знать, что имеет дело именно с XML

Внешний блок

Вложенный блок (с отступом), содержащий информацию о материке Южная Америка

Блоки более глубокого уровня вложения, содержащие информацию о двух странах в Азии

XML весьма похож на HTML, но в XML вы можете определять собственные теги.

Давайте обсудим два термина, значение которых вы должны ясно представлять для дальнейшего изучения языка XML.

Элементы

XML-данные содержатся в элементах. У элемента есть имя и обычно имеется значение. В приведенном ниже примере элемент «Country» имеет значение «Argentina».

elementname

elementvalue

<Country>

Argentina

</Country>

Как можно заметить, элемент ограничивается открывающим и закрывающим тегами. Имя закрывающего тега должно совпадать с именем открывающего тега, но перед именем добавляется косая черта "/".

Для записи элемента, не имеющего значения, допускается применять один тег, в котором после имени элемента ставится косая закрывающая черта.

elementname

<Country />

Атрибуты

У элемента могут быть дополнительные свойства, которые необходимо описать. Например, нам может потребоваться указать столицу страны, для чего мы можем создать атрибут элемента с именем «capital». В приведенном ниже примере у элемента «Country» со значением «Argentina» атрибут «capital» имеет значение «Buenos Aires».

НЕ нашли? Не то? Что вы ищете?

elementname

attributename

attributevalue

elementvalue

<Country

capital

=

"Buenos Aires"

>

Argentina

</Country>

Человеку очень просто читать подобные документы, а поскольку они имеют четкую структуру, можно предположить, что и компьютер можно легко этому научить. Например, составить такой набор инструкций: «Начать просмотр документа; при нахождении символа "<" — читать имя элемента. При нахождении символа ">" — читать значение элемента... и так далее.

Пример программы 15

Следующая программа считывает географические данные из XML-файла и отображает их на форме.

В ней используются три класса из пространства имен System. Xml:

    XmlDocument (создает объект, загружающий XML-данные для последующей работы); XmlNodeList (запоминает список элементов, читаемых из файла); XmlNode (запоминает один XML-элемент).

Программа позволяет пользователю вводить так называемое выражение xPath для указания того, какие именно элементы необходимо извлечь из XML-файла. Выражение xPath вида «//earth/continent/country» означает: «найти все элементы с именем "country", вложенные в элемент с именем "continent", вложенный в свою очередь в элемент с именем "earth"».

Код программы 15

  using System;

  using System. Windows. Forms;

  using System. Drawing;

  using System. Xml;  // Пространство имен для работы XML-данными

  using System. Xml. XPath; // Пространство имен для работы с выражениями xPath

  class XmlRetriever : Form

  {

  ComboBox comboBox1;

  Button button1;

  ListBox listBox1;

  RichTextBox richTextBox1;

  XmlDocument xmlDoc;

  // Метод-конструктор нашего класса

  public XmlRetriever()

  {

  // Указываем высоту и заголовок окна

  this. Text = "XML Retrieval";

  this. Size = new Size(400, 400);

  // Загружаем XML-файл с диска в находящийся в памяти объект XmlDocument

  xmlDoc = new XmlDocument();

  xmlDoc. Load("../../data/earthData. xml");

  // Готовим объект TextBox большого размера для вывода данных

  richTextBox1 = new RichTextBox();

  richTextBox1.Dock = DockStyle. Top;

  richTextBox1.AcceptsTab = true;

  richTextBox1.Height = 180;

  richTextBox1.ReadOnly = true;

  richTextBox1.BackColor = Color. Silver;

  // Помещаем XML-данные в элемент TextBox и добавляем его на форму

  richTextBox1.Text = xmlDoc. OuterXml;

  this. Controls. Add(richTextBox1);

  // Добавляем элемент управления ComboBox, позволяющий вводить

  // новое или выбирать существующее выражение Xpath. Добавим несколько

  // выражений XPath в качестве примера их написания.

  // (ComboBox представляет собой сочетание элементов TextBox и ListBox)

  comboBox1 = new ComboBox();

  comboBox1.Location = new Point(0, 200);

  comboBox1.Width = 300;

  comboBox1.Items. Add("//Earth/Continent");

  comboBox1.Items. Add("//Earth/Continent/Country");

  comboBox1.Items. Add("//Earth/Continent/Country[@capital='Nairobi']");

  comboBox1.SelectedIndex = 0;

  this. Controls. Add(comboBox1);

  // Добавляем кнопку, нажатие которой приводит к отображению соответствующих элементов

  button1 = new Button();

  button1.Text = "Get data";

  button1.Location = new Point(310, 200);

  button1.Click += new EventHandler(Button1_Click);

  this. Controls. Add(button1);

  // Добавляем элемент ListBox для отображения элементов

  listBox1 = new ListBox();

  listBox1.Dock = DockStyle. Bottom;

  listBox1.Location = new Point(10, 10);

  this. Controls. Add(listBox1);

  }

  static void Main()

  {

  // Запускаем новый экземпляр приложения Windows Forms при помощи вышеописанного класса

  Application. Run( new XmlRetriever() );

  }

  // Обработчик события, срабатывающий при нажатии кнопки

  void Button1_Click(object sender, EventArgs e)

  {

  XmlNodeList xmlNodes;

  XmlNode xmlElement;

  string elementValue;

  // Используем блок try-catch для обработки исключений, вызванных ошибками

  // в выражениях XPath, и предотвращения сбоев приложения

  try

  {

  // Выбираем из XML-документа элементы, соответствующие

  // выражению XPath, заданному в ComboBox

  xmlNodes = xmlDoc. SelectNodes(comboBox1.Text);

  listBox1.Items. Clear();

  // Производим циклический перебор найденных элементов,

  // добавляя каждый элемент в ListBox

  for (int i = 0; i < xmlNodes. Count; i++)

  {

  xmlElement = xmlNodes[i];

  if (xmlElement. HasChildNodes)

  {

  elementValue = xmlElement. FirstChild. Value. Trim();

  listBox1.Items. Add(elementValue);

  }

  }

  }

  catch (XPathException ex)

  {

  // При обнаружении ошибки XPath, выводим сообщение и продолжаем работу программы

  MessageBox. Show

  (

  "No matching data was found. Try another xPath expression.",

  "Error Encountered. " + ex. Message

  );

  }

  }

  }

Программа отображает исходный XML-файл в элементе управления RichTextBox. Далее под выражением xPath, вводимым или выбираемым пользователем, отображаются результаты выборки. После запуска программы поэкспериментируйте с вводом и выбором выражения xPath, после чего нажмите кнопку «Получить данные».


Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7