使用C#

时间:2015-06-01 03:19:45

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

    <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 ...都不会返回正确的元素/ children /无论你怎么称呼它。我无法找到告诉我我想要参考的文档。我不知道ID或BOX是否是孩子,如果他们是属性或什么。这是我第一次使用XML,我似乎无法缩小我的问题范围。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您只需使用以下代码

即可
 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

答案 2 :(得分:1)

您尝试的xpath尝试查找具有子元素<Block>的{​​{1}}元素。在xpath中,您可以使用属性名称开头的<ID>来引用属性,例如@

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

SelectSingleNode()

Demo