Общие сведения о классе 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-деревьями на уровне узлов. Многие разработчики не будут обеспокоены этим различием.