Recuperando atributos do XML
-
21-09-2019 - |
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?
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