开发者

How do I get the XML root node with C#?

开发者 https://www.devze.com 2023-01-31 09:13 出处:网络
I know that it\'s possible to get any XML node using C# if you know the node name, but I want to get the root node so that I can find o开发者_开发技巧ut the name. Is this possible?

I know that it's possible to get any XML node using C# if you know the node name, but I want to get the root node so that I can find o开发者_开发技巧ut the name. Is this possible?

Update: I'm using XMLTextReader to read in the URL of a file and then loading that into XMLDocument object. Basically I'm trying to avoid LINQ to XML, but if there's another, better way then I'm always a good student.


Root node is the DocumentElement property of XmlDocument

XmlElement root = xmlDoc.DocumentElement

If you only have the node, you can get the root node by

XmlElement root = xmlNode.OwnerDocument.DocumentElement


I got the same question here. If the document is huge, it is not a good idea to use XmlDocument. The fact is that the first element is the root element, based on which XmlReader can be used to get the root element. Using XmlReader will be much more efficient than using XmlDocument as it doesn't require load the whole document into memory.

  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;
      }
    }
  }


Agree with Jewes, XmlReader is the better way to go, especially if working with a larger XML document or processing multiple in a loop - no need to parse the entire document if you only need the document root.

Here's a simplified version, using XmlReader and 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;
}


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
string rootNode = XmlDoc.ChildNodes[0].Name;


Try this

XElement root = XDocument.Load(fStream).Root;
0

精彩评论

暂无评论...
验证码 换一张
取 消