Attention: We are retiring the ASP.NET Community Blogs. Learn more >

Xml from a directory structure

I needed to generate an XML document that showed all directories and html files in a certain folder and the folders below that. This is what I quickly wipped up:

using System;

using System.IO;

using System.Xml;

 

namespace MenuBuilder

{

           /// <summary>

           /// Summary description for MenuBuilder.

           /// </summary>

           public class MenuBuilder

           {

                      public static void Main(string[] args)

                      {

                                 Console.WriteLine("Starting...");

 

                                 XmlDocument doc = new XmlDocument();

                                 doc.LoadXml("<directory>" +

                                            "</directory>");

 

                                 //recurse through directories and return XmlNodes

                                 XmlElement elem = GetData(@"c:\temp", doc);

                                 doc.DocumentElement.AppendChild(elem);

 

                                 doc.Save(@"c:\temp\dir.xml");

                      }

 

                      private static XmlElement GetData(string dirName, XmlDocument doc)

                      {

                                 //create a new node for this directory

                                 XmlElement elem = doc.CreateElement("dir");

                                 DirectoryInfo di = new DirectoryInfo(dirName);

                                 elem.SetAttribute("name",di.Name);

 

                                 foreach (DirectoryInfo dinf in di.GetDirectories())

                                 {

                                            //Recursively call the directory with all underlying dirs and files

                                            XmlElement elemDir = GetData(dirName + "\\" + dinf.Name, doc);

                                            elem.AppendChild(elemDir);

                                 }

 

                                 //Append the files in this directory to the current xml node

                                 foreach (FileInfo finf in di.GetFiles("*.htm*"))

                                 {

                                            XmlElement elemDir = doc.CreateElement("file");

                                            elemDir.SetAttribute("name",finf.Name);

                                            elem.AppendChild(elemDir);

                                 }

 

                                 return elem;

                      }

           }

}

 

 

No Comments