如何使用C#获取XML根节点?

Pie*_*arg 47 c# xml

我知道如果您知道节点名称,可以使用C#获取任何XML节点,但我想获取根节点以便我可以找到该名称.这可能吗?

更新:我正在使用XMLTextReader读取文件的URL,然后将其加载到XMLDocument对象中.基本上我是想避免使用LINQ to XML,但如果还有另一种更好的方法,那么我总是一个好学生.

Cha*_*esB 80

根节点是DocumentElement属性XmlDocument

XmlElement root = xmlDoc.DocumentElement
Run Code Online (Sandbox Code Playgroud)

如果您只有节点,则可以获取根节点

XmlElement root = xmlNode.OwnerDocument.DocumentElement
Run Code Online (Sandbox Code Playgroud)


Min*_*Shi 21

我在这里得到了同样的问题.如果文档很大,使用XmlDocument不是一个好主意.事实是第一个元素是根元素,基于该元素可以使用XmlReader来获取根元素.使用XmlReader将比使用XmlDocument更有效,因为它不需要将整个文档加载到内存中.

  using (XmlReader reader = XmlReader.Create(<your_xml_file>)) {
    while (reader.Read()) {
      // first element is the root element
      if (reader.NodeType == XmlNodeType.Element) {
        System.Console.WriteLine(reader.Name);
        break;
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)


Dan*_*ar3 15

同意犹太人,XmlReader是更好的方法,特别是如果使用更大的XML文档或在循环中处理多个 - 如果您只需要文档根,则无需解析整个文档.

这是一个简化版本,使用XmlReader和MoveToContent().

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.movetocontent.aspx

using (XmlReader xmlReader = XmlReader.Create(p_fileName))
{
  if (xmlReader.MoveToContent() == XmlNodeType.Element)
    rootNodeName = xmlReader.Name;
}
Run Code Online (Sandbox Code Playgroud)