题
为什么这段代码运行...
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?
解决方案
当你调用 SelectNodes
与 “// BaaBaa” 返回 “BaaBaa” 的所有元素。
你可以从自己的文档看,BaaBaa没有属性,它是一个具有单个属性“HaveYouAny”的“害群之马”元素
如果你想获得子元素的属性数量,你必须从你是通过迭代的节点上时,节点浏览到这一点。
其他提示
element.Attributes
包含元件本身的属性,而不是它的孩子。
由于BaaBaa
元件不具有任何属性,它是空的。
在InnerXml
属性返回的元素的内容的XML,而不是元素本身。因此,它有一个属性。
<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
不隶属于 StackOverflow