Pergunta

Por que executar este código ...

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);
}

Produzir a seguinte saída no prompt de comando?

<BlackSheep HaveYouAny="Wool" />
0

Isto é, não deveria attributes.Count retornar 1?

Foi útil?

Solução

Quando Você ligar SelectNodes Com "// baabaa", ele retorna todos os elementos de "Baabaa".

Como você pode ver em seu próprio documento, a Baabaa não tem atributos, é o elemento "BlackSheep" que tem o único atributo "Haveyouany".

Se você deseja obter a contagem de atributos dos elementos filhos, precisará navegar para isso do nó em que está na iteração dos nós.

Outras dicas

element.Attributes Contém os atributos do próprio elemento, não seus filhos.

Desde o BaaBaa O elemento não tem nenhum atributo, está vazio.

o InnerXml A propriedade retorna o XML do conteúdo do elemento, não do próprio elemento. Portanto, ele tem um atributo.

<BlackSheep HaveYouAny=""Wool"" /> // innerXml that includes children
<BaaBaa> // is the only node Loaded, which has '0' attributes 

solução

XmlAttributeCollection attributes = element.FirstChild.Attributes;

Produzirá a seguinte saída necessária

<BlackSheep HaveYouAny="Wool" />
1
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top