Например, можно составить 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 |


