<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,我似乎无法缩小我的问题范围。
答案 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;
}
答案 2 :(得分:1)
您尝试的xpath尝试查找具有子元素<Block>
的{{1}}元素。在xpath中,您可以使用属性名称开头的<ID>
来引用属性,例如@
。
给定正确的xpath表达式作为参数,/Block/@ID
和SelectNodes()
能够返回属性。这是一个例子:
SelectSingleNode()
的 Demo 强>