Экспорт (0) Печать
Развернуть все
Эта статья переведена вручную. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

Доступ к атрибутам в модели DOM

Атрибуты — свойства элемента, а не его дочерние элементы. Это различие очень важно из-за методов, используемых для перемещения по дочерним, родительским и одноуровневым узлам модели XML DOM. Например, методы PreviousSibling и NextSibling не используются для перемещения с элемента на атрибут или с одного атрибута на другой. Вместо этого атрибут является свойством элемента и принадлежит ему. У атрибута есть свойство OwnerElement вместо свойства parentNode. Для атрибутов существуют специальные методы навигации.

Если текущий узел является элементом, можно узнать, есть ли у него атрибуты, с помощью метода HasAttribute. Если у элемента есть атрибуты, к ним можно получить доступ различными методами. Можно воспользоваться методами GetAttribute и GetAttributeNode класса XmlElement для получения единичного атрибута элемента, или получить все атрибуты сразу в виде коллекции. Получение коллекции удобно, если предполагается ее обзор. Если нужно получить все атрибуты данного элемента, следует воспользоваться его свойством Attributes для получения всех атрибутов в виде коллекции.

Если нужно поместить все атрибуты узла элемента в коллекцию, это можно сделать с помощью свойства XmlElement.Attributes. Таким образом можно получить коллекцию XmlAttributeCollection, содержащую все атрибуты элемента. Класс XmlAttributeCollection является производным от карты XmlNamedNode. Поэтому свойства и методы, доступные для данной коллекции, включают в себя те, что доступны для карты именованного узла, в дополнение к методам и свойствам, специфичным для класса XmlAttributeCollection — таким, как свойство ItemOf или метод Append. Каждый элемент коллекции атрибутов представляет собой узел XmlAttribute. Чтобы выяснить число атрибутов данного элемента, нужно получить объект XmlAttributeCollection и воспользоваться его свойством Count, чтобы узнать, сколько узлов XmlAttribute содержится в коллекции.

В следующем примере кода показано, как получить коллекцию атрибутов и пройти по ней, используя метод Count для индекса цикла. Затем в примере демонстрируется получение одного атрибута из коллекции и вывод его значения.

using System;
using System.IO;
using System.Xml;

public class Sample
{

    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" +
                      "<title>The Handmaid's Tale</title>" +
                      "<price>14.95</price>" +
                      "</book>");

        // 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 — коллекция, и ее можно обходить по имени или индексу, в данном примере показан выбор из коллекции первого атрибута на основе индекса (с отсчетом от 0). В качестве ввода используется файл baseuri.xml.

hk61a712.collapse_all(ru-ru,VS.110).gifВход

<!-- XML fragment -->
<book genre="novel">
  <title>Pride And Prejudice</title>
</book>
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 attribtue:  {0}", attr.InnerText);
  }
}

Для получения из элемента одного узла атрибута используется метод XmlElement.GetAttributeNode. Он возвращает объект типа XmlAttribute. Для полученного объекта XmlAttribute доступны все методы и свойства класса XmlAttribute Members — например, можно найти значение OwnerElement.

using System;
using System.IO;
using System.Xml;
 
 public class Sample
 {
      public static void Main()
      {
    XmlDocument doc = new XmlDocument();
     doc.LoadXml("<book genre='novel' ISBN='1-861003-78' misc='sale item'>" +
                   "<title>The Handmaid's Tale</title>" +
                   "<price>14.95</price>" +
                   "</book>"); 

    // Move to an element.
     XmlElement root = doc.DocumentElement;
   
    // Get an attribute.
     XmlAttribute attr = root.GetAttributeNode("ISBN");
  
    // Display the value of the attribute.
     String attrValue = attr.InnerXml;
     Console.WriteLine(attrValue);

    }
}

Можно также поступить как в предыдущем примере, где единичный узел атрибута был получен из коллекции атрибутов.Следующий пример демонстрирует, как с помощью одной строки кода можно получить единичный атрибут по значению индекса из корневого элемента дерева XML-документа, известного также как свойство DocumentElement.

XmlAttribute attr = doc.DocumentElement.Attributes[0];

Основные понятия

Добавления сообщества

ДОБАВИТЬ
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2014 Microsoft