Общие сведения о классе XAttribute
Атрибуты - это пары «имя-значение», ассоциированные с элементом. Класс XAttribute представляет XML-атрибуты.
Обзор
Работа с атрибутами LINQ to XML аналогична работе с элементами. Они имеют аналогичные конструкторы. Аналогичны и методы, используемые для получения их коллекций. По своему виду выражение запроса LINQ для коллекции атрибутов весьма напоминает выражение запроса LINQ для коллекции элементов.
Порядок, в котором атрибуты добавлялись к элементу, сохраняется. Иначе говоря, при просмотре атрибутов они отображаются в том же порядке, в каком были добавлены.
Конструктор XAttribute
Чаще всего используется следующий конструктор класса XAttribute.
Конструктор |
Описание |
---|---|
XAttribute(XName name, object content) |
Создает объект XAttribute. Аргумент name указывает имя атрибута; content указывает содержимое атрибута. |
Создание элемента с атрибутом
Следующий код иллюстрирует типичную задачу создания элемента, содержащего атрибут:
XElement phone = new XElement("Phone",
new XAttribute("Type", "Home"),
"555-555-5555");
Console.WriteLine(phone);
С помощью Visual Basic можно создавать литералы XML:
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-дерева, работа с объектами XAttribute весьма напоминает работу с объектами XElement.
Это различие имеет первостепенную важность только для разработчиков, создающих коды, которые взаимодействуют с XML-деревьями на уровне узлов. Для многих разработчиков это различие не имеет значения.