Общие сведения о классе XAttribute

Атрибуты — это пары "имя-значение", связанные с элементом. Класс XAttribute представляет XML-атрибуты.

Работа с атрибутами в LINQ to XML аналогична работе с элементами. Они имеют аналогичные конструкторы. Аналогичны и методы, используемые для получения их коллекций. Выражение запроса LINQ для коллекции атрибутов выглядит примерно так, как выражение запроса LINQ для коллекции элементов.

Порядок, в котором атрибуты добавлялись к элементу, сохраняется. Иначе говоря, при просмотре атрибутов они отображаются в том же порядке, в каком были добавлены.

Конструктор XAttribute

Следующий конструктор XAttribute класса — это тот, который чаще всего используется:

Конструктор Description
XAttribute(XName name, object content) Создает объект XAttribute. Аргумент name указывает имя атрибута; content указывает содержимое атрибута.

Пример. Создание элемента с атрибутом

В следующем примере показана общая задача создания элемента, содержащего атрибут.

XElement phone = new XElement("Phone",
    new XAttribute("Type", "Home"),
    "555-555-5555");
Console.WriteLine(phone);
Dim phone As XElement = <Phone Type="Home">555-555-5555</Phone>
Console.WriteLine(phone)

В примере получается следующий вывод.

<Phone Type="Home">555-555-5555</Phone>

Пример: функциональное построение атрибутов

Вы можете создавать XAttribute объекты в соответствии со строительством XElement объектов, как показано в следующем примере:

XElement c = new XElement("Customers",
    new XElement("Customer",
        new XElement("Name", "John Doe"),
        new XElement("PhoneNumbers",
            new XElement("Phone",
                new XAttribute("type", "home"),
                "555-555-5555"),
            new XElement("Phone",
                new XAttribute("type", "work"),
                "666-666-6666")
        )
    )
);
Console.WriteLine(c);
Dim c As XElement = _
    <Customers>
        <Customer>
            <Name>John Doe</Name>
            <PhoneNumbers>
                <Phone type="home">555-555-5555</Phone>
                <Phone type="work">666-666-6666</Phone>
            </PhoneNumbers>
        </Customer>
    </Customers>
Console.WriteLine(c)

В примере получается следующий вывод.

<Customers>
  <Customer>
    <Name>John Doe</Name>
    <PhoneNumbers>
      <Phone type="home">555-555-5555</Phone>
      <Phone type="work">666-666-6666</Phone>
    </PhoneNumbers>
  </Customer>
</Customers>

Атрибуты не являются узлами

Между атрибутами и элементами имеются существенные различия. XAttribute Объекты не являются узлами в дереве XML. Они — пары "имя-значение", связанные с XML-элементом. В отличие от модели DOM, это более точно отражает структуру XML. Хотя XAttribute объекты на самом деле не являются узлами в xml-дереве, работа с объектами аналогична работе с XAttributeXElement объектами.

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

См. также