2

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

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 吗?

4

3 回答 3

3

当您SelectNodes使用“//BaaBaa”调用时,它会返回“BaaBaa”的所有元素。

从您自己的文档中可以看出,BaaBaa 没有属性,它是具有单个属性“HaveYouAny”的“BlackSheep”元素。

如果要获取子元素的属性计数,则必须在遍历节点时从您所在的节点导航到该属性计数。

于 2010-02-18T00:44:52.893 回答
1

element.Attributes包含元素本身的属性,而不是其子元素。

由于该BaaBaa元素没有任何属性,因此它是空的。

InnerXml属性返回元素内容的 XML,而不是元素本身的 XML。因此,它确实有一个属性。

于 2010-02-18T00:45:01.410 回答
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
于 2010-02-18T00:46:15.827 回答