【问题标题】:Retrieving attributes from XML从 XML 中检索属性
【发布时间】:2011-01-18 03:16:51
【问题描述】:

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

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

【问题讨论】:

    标签: c# xml xmldocument selectnodes


    【解决方案1】:

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

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

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

    【讨论】:

    • 干杯。我的困惑在于认为 doc.SelectNodes("//BaaBaa") 将返回“BaaBaa”子节点的节点列表,而不是返回所有“BaaBaa”节点(在这种情况下 - 只有 1 个节点,它有 0 个属性)。
    【解决方案2】:

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

    由于BaaBaa 元素没有任何属性,所以它是空的。

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

    【讨论】:

      【解决方案3】:
      <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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多