使用c#读取XML属性

本文关键字:属性 XML 读取 使用 | 更新日期: 2023-09-27 17:51:15

    <Block ID="Ar0010100" BOX="185 211 825 278" ELEMENT_TYPE="h1" SEQ_NO="0" />

这是我的XML代码的一个例子。在c#中,我需要在一个变量的块元素中存储ONLY ID,并且在块元素中存储ONLY Box。我已经试了两天了,我不知道如何缩小我的问题范围。

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

不工作…任何版本的文档。selectnode doc.GetElementBy…不返回正确的元素/子元素/不管你怎么称呼它。我找不到告诉我要引用什么的文档。我不知道如果ID或BOX是子,如果他们是属性或什么。这是我第一次使用XML,我似乎无法缩小我的问题。

使用c#读取XML属性

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

 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

使用XmlDocument读取XML属性

问题是ID实际上既不是也不是部分。它是一个节点的属性。你可以这样访问它:

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

您尝试的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);
}
演示