使用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,我似乎无法缩小我的问题。
您可以简单地使用以下代码
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);
}
演示