如何在XML C#中获取根级节点

时间:2018-08-02 10:08:53

标签: c# xml xmldocument

我正在尝试访问给定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。我们有什么可以访问的吗?

3 个答案:

答案 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