使用 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);
}
<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);
}