【问题标题】:Read XML Attribute using C#使用 C# 读取 XML 属性
【发布时间】:2015-08-14 10:05:54
【问题描述】:
    <Block ID="Ar0010100" BOX="185 211 825 278" ELEMENT_TYPE="h1" SEQ_NO="0" />

这是我的 XML 代码中的一个示例。在 C# 中,我只需要在一个变量中存储块元素内的 ID,并且只需要在块元素内存储 Box。我一直在尝试这样做两天,但我不知道如何缩小我的问题。

XmlNodeList idList = doc.SelectNodes("/Block/ID");

不起作用...任何版本的 doc.selectnode、doc.GetElementBy... 都不会返回正确的元素/子元素/无论您如何称呼它。我找不到可以告诉我要参考什么的文档。我不知道 ID 或 BOX 是否是孩子,如果他们是属性或什么。这是我第一次使用 XML,我似乎无法缩小我的问题范围。

【问题讨论】:

标签: c# xml xml-parsing xmlnode xml-attribute


【解决方案1】:

问题在于 ID 实际上既不是 child 也不是 part
这是一个节点的属性。您可以通过以下方式访问它:

doc.SelectSingleNode("/Block").GetAttribute("ID")
// or 
doc.SelectSingleNode("/Block").Attributes["ID"].Value

当然,你可以遍历它们:

foreach (XmlElement element in doc.SelectNodes("/Block"))
{ 
    Console.WriteLine(element.GetAttribute("ID"));
}

您还可以确保它包含 ID 属性,这样您就不会得到 NullReferenceException 或其他异常。使用以下 XPath:

foreach (XmlElement element in doc.SelectNodes("/Block[@ID]"))
{ 
    Console.WriteLine(element.GetAttribute("ID"));
}

【讨论】:

  • 这些我都试过了。变量为空。我不确定出了什么问题。
  • @nanthil 你能告诉我你试图解析的整个 XML 字符串/文件吗?
【解决方案2】:

您可以简单地使用以下代码

 XmlNodeList elemList = doc.GetElementsByTagName("Your Element");
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["ID"].Value;
}

演示:https://dotnetfiddle.net/5PpNPk

以上代码取自这里Read XML Attribute using XmlDocument

【讨论】:

    【解决方案3】:

    您尝试的 xpath 试图找到具有子元素 &lt;ID&gt;&lt;Block&gt; 元素。在 xpath 中,您在属性名称的开头使用@ 来引用属性,例如/Block/@ID

    给定一个正确的 xpath 表达式作为参数,SelectNodes()SelectSingleNode() 能够返回属性。这是一个例子:

    var xml = @"<Block ID=""Ar0010100"" BOX=""185 211 825 278"" ELEMENT_TYPE=""h1"" SEQ_NO=""0"" />";
    var doc = new XmlDocument();
    doc.LoadXml(xml);
    XmlNodeList idList = doc.SelectNodes("/Block/@ID");
    foreach(XmlNode id in idList)
    {
        Console.WriteLine(id.Value);
    }
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2010-10-30
      • 2022-01-13
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多