为什么这段代码运行...

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top