Извлечение атрибутов из XML - PullRequest
       38

Извлечение атрибутов из XML

2 голосов
/ 18 февраля 2010

Почему работает этот код ...

XmlDocument doc = new XmlDocument();

string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
                   <BaaBaa>
                        <BlackSheep HaveYouAny=""Wool"" />  
                   </BaaBaa>";

doc.LoadXml(xml);

XmlNodeList nodes = doc.SelectNodes("//BaaBaa");

foreach (XmlElement element in nodes)
{
    Console.WriteLine(element.InnerXml);

    XmlAttributeCollection attributes = element.Attributes;
    Console.WriteLine(attributes.Count);
}

Создать следующий вывод в командной строке?

<BlackSheep HaveYouAny="Wool" />
0

То есть, attributes.Count не должно возвращать 1?

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

Когда вы вызываете SelectNodes с "// BaaBaa", он возвращает все элементы "BaaBaa".

Как видно из вашего собственного документа, BaaBaa не имеет атрибутов, это элемент "BlackSheep", который имеет единственный атрибут "HaveYouAny".

Если вы хотите получить количество атрибутов дочерних элементов, вам нужно перейти к нему с узла, на котором вы находитесь, при итерации по узлам.

1 голос
/ 18 февраля 2010

element.Attributes содержит атрибуты самого элемента, а не его дочерних элементов.

Поскольку элемент BaaBaa не имеет никаких атрибутов, он пуст.

Свойство InnerXml возвращает XML содержимого элемента, а не самого элемента. Следовательно, он имеет атрибут.

0 голосов
/ 18 февраля 2010
<BlackSheep HaveYouAny=""Wool"" /> // innerXml that includes children
<BaaBaa> // is the only node Loaded, which has '0' attributes 

решение

XmlAttributeCollection attributes = element.FirstChild.Attributes;

Будет выдавать следующий требуемый результат

<BlackSheep HaveYouAny="Wool" />
1
...