МУ_ЛР_ЛиПОАС. Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем
Скачать 2.76 Mb.
|
2.18. Загрузка данных из модуля чтенияЕсли XML-документ загружен с помощью метода Load и параметра XmlReader, его поведение отличается от поведения загруженных данных других форматов. Если модуль чтения находится в начальном состоянии, метод Load получает все его содержимое и строит модель XML DOM на основе всех данных модуля чтения. Если модуль чтения уже позиционирован на одном из узлов документа и передается методу Load, то метод Load пытается считать текущий узел и все его одноуровневые элементы вплоть до закрывающего тега, закрывающего текущую глубину в памяти. Успех попытки метода Load зависит от узла, на котором находится модуль чтения при попытке загрузки, когда метод Load проверяет, что XML-документ из модуля чтения правильного формата. Если XML-документ неправильного формата, метод Load вызывает исключение. Например, следующий набор узлов содержит два корневых элемента, XML-документ неправильного формата, и метод Load вызывает исключение. Узел Comment, за которым следует узел Element, еще один узел Element и узел EndElement. Следующий набор узлов создает неполную модель DOM, поскольку отсутствует корневой элемент. Узел Comment, за которым следует узел ProcessingInstruction, еще один узел Comment и узел EndElement. В этом случае исключения не возникает, и данные загружаются. В верхнюю часть этих узлов можно добавить корневой элемент и создать XML-документ правильного формата, который можно сохранить без ошибки. Если модуль чтения расположен на конечном узле, недопустимом для корневого уровня документа (например, пробел или узел атрибута), он продолжает читать, пока не окажется на узле, который можно использовать в качестве корневого. Документ начинает загружаться в этой точке. По умолчанию метод Load не проверяет допустимость XML с помощью определения типа документа (DTD) или проверки схемы. Он только проверяет правильность формата XML-документа. Чтобы выполнялась проверка, необходимо создать объект XmlReader с помощью класса XmlReaderSettings. Класс XmlReader может применять проверку с помощью DTD или XSD-схемы. Свойство ValidationType класса XmlReaderSettings определяет, применяет ли экземпляр XmlReader принудительную проверку. 2.19. Доступ к атрибутам в модели DOMАтрибуты - свойства элемента, а не его дочерние элементы. Это различие очень важно из-за методов, используемых для перемещения по дочерним, родительским и одноуровневым узлам модели XML DOM. Например, методы PreviousSibling и NextSibling не позволяют перемещаться с элемента на атрибут или с одного атрибута на другой. Вместо этого атрибут является свойством элемента и принадлежит ему. У атрибута есть специальные методы навигации и свойство OwnerElement, но нет свойства parentNode. Если текущий узел является элементом, метод HasAttribute позволяет узнать, есть ли у него атрибуты. Если у элемента есть атрибуты, к ним можно получить доступ различными методами. Чтобы получить отдельный атрибут элементв, используйте методы GetAttribute и GetAttributeNode класса XmlElement. Также есть возможность получить все атрибуты сразу в виде коллекции. Получение коллекции удобно, если предполагается ее обзор. Если нужно получить все атрибуты конкретного элемента, воспользуйтесь его свойством Attributes для получения всех атрибутов в виде коллекции. 2.20. Получение всех атрибутов в виде коллекцииЕсли нужно поместить все атрибуты узла элемента в коллекцию, вызовите свойство XmlElement.Attributes. Оно возвращает коллекцию XmlAttributeCollection со всеми атрибутами элемента. Класс XmlAttributeCollection наследует от карты XmlNamedNode. Таким образом, для этой коллекции доступны все свойства и методы, что и для карты именованного узла, а также все методы и свойства класса XmlAttributeCollection, например свойство ItemOf и метод Append. Каждый элемент коллекции атрибутов представляет узел XmlAttribute. Чтобы выяснить число атрибутов некоторого элемента, получите коллекцию XmlAttributeCollection и вызовите ее свойство Count, которое содержит число узлов XmlAttribute в коллекции. В следующем примере кода показано, как получить коллекцию атрибутов и последовательно перебрать ее элементы, используя метод Count в роли индекса цикла. Затем в примере демонстрируется получение одного атрибута из коллекции и вывод его значения. C# using System; using System.IO; using System.Xml; public class Sample { public static void Main() { XmlDocument doc = new XmlDocument(); doc.LoadXml(" "" + " 14.95 " + " // Move to an element. XmlElement myElement = doc.DocumentElement; // Create an attribute collection from the element. XmlAttributeCollection attrColl = myElement.Attributes; // Show the collection by iterating over it. Console.WriteLine("Display all the attributes in the collection..."); for (int i = 0; i < attrColl.Count; i++) { Console.Write("{0} = ", attrColl[i].Name); Console.Write("{0}", attrColl[i].Value); Console.WriteLine(); } // Retrieve a single attribute from the collection; specifically, the // attribute with the name "misc". XmlAttribute attr = attrColl["misc"]; // Retrieve the value from that attribute. String miscValue = attr.InnerXml; Console.WriteLine("Display the attribute information."); Console.WriteLine(miscValue); } } Этот пример выводит следующие данные: Выходные данные Отображает все атрибуты из коллекции. Консоль genre = novel ISBN = 1-861001-57-5 misc = sale item Display the attribute information. sale item Информация из коллекции атрибутов может быть получена по имени или по значению индекса. В примере показано получение данных по имени. В следующем примере показано получение данных по значению индекса. XmlAttributeCollection является коллекцией, которую можно обходить по имени или индексу. В этом примере мы выбираем из коллекции первый атрибут по индексу (нумерация начинается с нуля) и применяем файл baseuri.xml в качестве источника входных данных. Входные данныеC#Копировать using System; using System.IO; using System.Xml; public class Sample { public static void Main() { // Create the XmlDocument. XmlDocument doc = new XmlDocument(); doc.Load("http://localhost/baseuri.xml"); // Display information on the attribute node. The value // returned for BaseURI is 'http://localhost/baseuri.xml'. XmlAttribute attr = doc.DocumentElement.Attributes[0]; Console.WriteLine("Name of the attribute: {0}", attr.Name); Console.WriteLine("Base URI of the attribute: {0}", attr.BaseURI); Console.WriteLine("The value of the attribute: {0}", attr.InnerText); } } |