Операция Attributes
40C# и .NET --- Сетевое программирование --- Операция Attributes
Операция Attributes может быть вызвана на последовательности элементов и возвращает последовательность, содержащую атрибуты каждого исходного элемента.
Операция Attributes имеет два прототипа, описанные ниже:
- Первый прототип Attributes
-
public static IEnumerable<XAttribute> Attributes ( this IEnumerable<XElement> source)
Эта версия операции может быть вызвана на последовательности элементов и возвращает последовательность атрибутов, содержащую все атрибуты каждого из исходных элементов.
- Второй прототип Attributes
-
public static IEnumerable<XAttribute> Attributes ( this IEnumerable<XElement> source, XName name )
Эта версия операции подобна первой, за исключением того, что в выходной последовательности возвращаются только атрибуты, соответствующие указанному имени.
Ниже показан пример использования первого прототипа Attributes:
XDocument xDoc = new XDocument(
new XElement("Employees",
new XElement("Employee",
new XAttribute("type", "Programmer"),
new XElement("FirstName", "Alex"), new XElement("LastName", "Erohin")),
new XElement("Employee",
new XAttribute("type", "Editor"),
new XElement("FirstName", "Elena"), new XElement("LastName", "Volkova"))));
// Получаем все элементы Employee
IEnumerable<XElement> elements = xDoc.Element("Employees").Elements("Employee");
foreach (XElement e in elements)
{
Console.WriteLine("Исходный элемент: {0} значение = {1}", e.Name, e.Value);
}
// Отображаем атрибуты элемента
foreach (XAttribute attr in elements.Attributes())
{
Console.WriteLine("Атрибут: {0} : значение = {1}",attr.Name, attr.Value);
}
После получения последовательности элементов Employee, отображаются все ее элементы. Затем на исходной последовательности вызывается операция Attribute и отображаются атрибуты в последовательности, возвращенной операцией Attribute. Вот результат:
Как видите, атрибуты извлечены. Для демонстрации второго прототипа Attribute применяется тот же базовый пример, но на этот раз указывается имя, которому должны соответствовать атрибуты, возвращенные операцией Attributes:
...
// Отображаем атрибуты элемента
foreach (XAttribute attr in elements.Attributes("type"))
{
Console.WriteLine("Атрибут: {0} : значение = {1}",attr.Name, attr.Value);
}
В приведенном коде указано, что атрибуты должны соответствовать имени type. Поэтому данный пример должен выдать тот же вывод, что и предыдущий, т.к. у элементов Employee в дереве XML отсутствуют другие атрибуты.
Если бы было указано имя Type с заглавной первой буквой, то эти два атрибута не были бы отображены, потому что операция Attributes не вернула бы их из входной последовательности. Это демонстрирует случай, когда соответствия имени нет, а также тот факт, что сопоставление имени чувствительно к регистру, что не удивительно, учитывая зависимость от регистра языка XML в целом.