Iterating through all nodes in XML file

后端 未结 5 1970
逝去的感伤
逝去的感伤 2020-11-27 05:16

I want to iterate through all nodes in an XML file and print their names. What is the best way to do this? I am using .NET 2.0.

相关标签:
5条回答
  • 2020-11-27 05:40

    This is what I quickly wrote for myself:

    public static class XmlDocumentExtensions
    {
        public static void IterateThroughAllNodes(
            this XmlDocument doc, 
            Action<XmlNode> elementVisitor)
        {
            if (doc != null && elementVisitor != null)
            {
                foreach (XmlNode node in doc.ChildNodes)
                {
                    doIterateNode(node, elementVisitor);
                }
            }
        }
    
        private static void doIterateNode(
            XmlNode node, 
            Action<XmlNode> elementVisitor)
        {
            elementVisitor(node);
    
            foreach (XmlNode childNode in node.ChildNodes)
            {
                doIterateNode(childNode, elementVisitor);
            }
        }
    }
    

    To use it, I've used something like:

    var doc = new XmlDocument();
    doc.Load(somePath);
    
    doc.IterateThroughAllNodes(
        delegate(XmlNode node)
        {
            // ...Do something with the node...
        });
    

    Maybe it helps someone out there.

    0 讨论(0)
  • 2020-11-27 05:50

    A recursive algorithm that parses through an XmlDocument

    Here is an example - Recursively reading an xml document and using regex to get contents

    Here is another recursive example - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html

    0 讨论(0)
  • 2020-11-27 05:58

    I think the fastest and simplest way would be to use an XmlReader, this will not require any recursion and minimal memory foot print.

    Here is a simple example, for compactness I just used a simple string of course you can use a stream from a file etc.

      string xml = @"
        <parent>
          <child>
            <nested />
          </child>
          <child>
            <other>
            </other>
          </child>
        </parent>
        ";
    
      XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
      while (rdr.Read())
      {
        if (rdr.NodeType == XmlNodeType.Element)
        {
          Console.WriteLine(rdr.LocalName);
        }
      }
    

    The result of the above will be

    parent
    child
    nested
    child
    other
    

    A list of all the elements in the XML document.

    0 讨论(0)
  • 2020-11-27 06:02

    To iterate through all elements

    XDocument xdoc = XDocument.Load("input.xml");
    foreach (XElement element in xdoc.Descendants())
    {
        Console.WriteLine(element.Name);
    }
    
    0 讨论(0)
  • 2020-11-27 06:04

    You can use XmlDocument. Also some XPath can be useful.

    Just a simple example

    XmlDocument doc = new XmlDocument();
    doc.Load("sample.xml");
    XmlElement root = doc.DocumentElement;
    XmlNodeList nodes = root.SelectNodes("some_node"); // You can also use XPath here
    foreach (XmlNode node in nodes)
    {
       // use node variable here for your beeds
    }
    
    0 讨论(0)
提交回复
热议问题