使用 C# 读取 XML 属性

Read XML Attribute using C#

    <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 的任何版本... return 都不符合您对 element/children/whatever 的称呼。我找不到可以告诉我我要参考的内容的文档。我不知道 ID 或 BOX 是否是 children,如果它们是属性或什么。这是我第一次使用 XML,我似乎无法缩小我的问题范围。

问题是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"));
}

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

 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

您尝试的 xpath 试图找到具有子元素 <ID><Block> 元素。在 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