为什么运行此代码...
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?
答案 0 :(得分:3)
当您使用“// BaaBaa”调用SelectNodes
时,它会返回“BaaBaa”的所有元素。
从您自己的文档中可以看出,BaaBaa没有属性,它是具有单个属性“HaveYouAny”的“BlackSheep”元素。
如果要获取子元素的属性计数,则必须在迭代节点时从您所在的节点导航到该元素。
答案 1 :(得分:1)
element.Attributes
包含元素本身的属性,而不是其子元素。
由于BaaBaa
元素没有任何属性,因此它是空的。
InnerXml
属性返回元素内容的XML,而不是元素本身的XML。因此,它确实有一个属性。
答案 2 :(得分:0)
<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