Domanda

Perché l'esecuzione di questo codice...

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

Produrre il seguente output nel prompt dei comandi?

<BlackSheep HaveYouAny="Wool" />
0

Cioè, non dovrebbe attributes.Count restituire 1?

È stato utile?

Soluzione

Quando si chiama SelectNodes con "// BaaBaa" restituisce tutti gli elementi di "BaaBaa".

Come si può vedere dal proprio documento, BaaBaa non ha attributi, è l'elemento "BlackSheep" che ha l'unico attributo "HaveYouAny".

Se si desidera ottenere il conteggio di attributo di elementi secondari, si deve navigare a che dal nodo si è accesa quando l'iterazione attraverso i nodi.

Altri suggerimenti

element.Attributes contiene gli attributi dell'elemento stesso, non i suoi figli.

Poiché l'elemento BaaBaa non ha attributi, è vuota.

La proprietà InnerXml restituisce l'XML del contenuto dell'elemento, non di dell'elemento stesso. Pertanto, esso ha un attributo.

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

soluzione

XmlAttributeCollection attributes = element.FirstChild.Attributes;

Produrrà il seguente output richiesto

<BlackSheep HaveYouAny="Wool" />
1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top