Recupero di attributi da XML
-
21-09-2019 - |
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?
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