我正在尝试访问给定xml中的第一级元素。我正在使用下面的代码来访问它,但是它给了我一个嵌套的嵌套。
var xml = "<grading>" +
"<leap>" +
"<controlId>1</controlId>" +
"</leap>" +
"<controlId>2</controlId>" +
"</grading>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var node = doc.DocumentElement.SelectSingleNode("//controlId").InnerText;
当我尝试访问根节点内部的值2时,它给我值1。我们有什么可以访问的吗?
答案 0 :(得分:3)
您的XPath表达式是
//controlId
这将找到称为controlId
的所有个后代。您只需要调用该方法的元素的直接子代,因此应该使用
controlId
这可行:
var node = doc.DocumentElement.SelectSingleNode("controlId").InnerText;
但是,我强烈建议改用LINQ to XML,作为更简洁的XML API:
using System;
using System.Xml.Linq;
public class Program
{
public static void Main(string[] args)
{
var xml = @"
<grading>
<leap>
<controlId>1</controlId>
</leap>
<controlId>2</controlId>
</grading>";
XDocument doc = XDocument.Parse(xml);
XElement control = doc.Root.Element("controlId");
Console.WriteLine(control.Value); // 2
}
}
除非您确实尝试使用XPath的高级功能,否则我将避免使用XPath。为了仅按名称检索元素,属性等,LINQ to XML API更简单且不易出错(如该问题的存在所示)。
答案 1 :(得分:1)
var node = doc.DocumentElement.SelectSingleNode("//grading/controlId").InnerText;
答案 2 :(得分:0)
我在解析XML时使用了大量的LINQ TO XML。例如,在您的集合中获取根。
string xml = "";
XDocument doc = XDocument.Parse(xml);
XElement elRoot = doc.Root
更多资源可以在这里找到: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-overview