МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
Скачать 2.76 Mb.
|
2.14. Сопоставление объектной иерархии с XML-даннымиКогда XML-документ находится в памяти, его концептуальным представлением является дерево. В распоряжении программиста имеется объектная иерархия для доступа к узлам этого дерева. Следующий пример показывает, как XML-содержимое становится узлами. При считывании XML в модель DOM, его фрагменты преобразуются в узлы, и эти узлы сохраняют дополнительные метаданные о себе, в частности, тип узла и значения. Тип узла - это его объект и характеристики, определяющие выполняемые действия и свойства, которые можно установить и получить. Если имеется следующий простой XML: Ввод Входные данные представлены в памяти следующим деревом узлов с назначенным свойством типа узлов: Представление дерева узлов book и title Элемент book становится объектом XmlElementtitle, следующий элемент также становится объектом XmlElement, а элемент content становится объектом XmlText. Методы и свойства объекта XmlElement отличаются от методов и свойств, доступных для объекта XmlText. Поэтому очень важно знать, какой тип узла получает XML, так как тип узла определяет действия, которые можно выполнить. В следующих примерах выполняется считывание XML-данных и запись другого текста, в зависимости от типа узла. Использование следующего XML-файла items.xml для получения входных данных. Ввод ]> Следующий пример кода считывает файл items.xml и отображает сведения о типах узлов. C# using System; using System.IO; using System.Xml; public class Sample { private const String filename = "items.xml"; public static void Main() { XmlTextReader reader = null; try { // Load the reader with the data file and ignore // all white space nodes. reader = new XmlTextReader(filename); reader.WhitespaceHandling = WhitespaceHandling.None; // Parse the file and display each of the nodes. while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: Console.Write("<{0}>", reader.Name); break; case XmlNodeType.Text: Console.Write(reader.Value); break; case XmlNodeType.CDATA: Console.Write("", reader.Value); break; case XmlNodeType.ProcessingInstruction: Console.Write("{0} {1}?>", reader.Name, reader.Value); break; case XmlNodeType.Comment: Console.Write("", reader.Value); break; case XmlNodeType.XmlDeclaration: Console.Write(""); break; case XmlNodeType.Document: break; case XmlNodeType.DocumentType: Console.Write(", reader.Name, reader.Value); break; case XmlNodeType.EntityReference: Console.Write(reader.Name); break; case XmlNodeType.EndElement: Console.Write("{0}>", reader.Name); break; } } } finally { if (reader != null) reader.Close(); } } } // End class Вывод примера содержит сопоставление данных типам узлов. Выходныеданные ] <--Fourteen chars in this element.--> Рассматривая входные данные построчно и используя выход, сформированный кодом, можно использовать следующую таблицу для анализа того, какой узел сформировал конкретные строки результата, и понять, какие XML-данные стали соответствующими типами узлов. Таблица 2.13
Необходимо знать, какой тип узла назначен, так как от типа узла зависят допустимые типы действий и типы свойств, которые можно установить и получить. |