2012-10-16 203 views
0

如果有返回基于目录创建目录结构的XML DOM

private static TreeNode GetDirectoryNodes(string path) 
     { 
      var dir = new DirectoryInfo(path); 
      var node = new TreeNode(dir.Name); 
      foreach (var directory in dir.GetDirectories()) 
      { 
       node.Nodes.Add(GetDirectoryNodes(path + "\\" + directory.ToString())); 
      } 
      return node; 
     } 

不过,我需要创建目录stucture的XML DOM一个TreeNode的方法,不过,我是新来的XML DOM和无法弄清楚如何做到这一点。我看到的问题是:如何将\放入XML中;以及如何获得子目录这是我到目前为止

private static XmlDocument GetDirTreeData(string path) 
     { 
      var dir = new DirectoryInfo(path); 
      XmlDocument XMLDOM = new XmlDocument(); 
      XmlElement xl = XMLDOM.CreateElement(path); 
      foreach (var directory in dir.GetDirectories()) 
      { 
       xl.InnerXml = directory.ToString(); 
      } 
      return XMLDOM; 
     } 
+0

喔......另一个** **非linq2xml solution..use ** ** linq2Xml ..其该死的简单比'XmlDocument' – Anirudha

回答

3

看看LINQ to XML。使用LINQ来完成任务更容易。 这里是工作的代码,但不处理拒绝访问和类似的问题

static void Main(string[] args) 
    { 
     XDocument xdoc = new XDocument(
      new XElement("Root", 
       DirToXml(new DirectoryInfo("C:\\MyFolder")))); 
    } 

    private static XElement DirToXml(DirectoryInfo dir) 
    { 
     return new XElement("Directory", 
        new XAttribute("Name", dir.Name), 
        dir.GetDirectories().Select(d => DirToXml(d))); 
    } 
XDOC

变量的XML文档。 DirToXml是递归方法,用于查找所有子目录并为其中的每个创建元素。

结果是这样的:

<Root> 
    <Directory Name=".history"> 
    <Directory Name="0" /> 
    <Directory Name="1" /> 
    <Directory Name="10" /> 
    <Directory Name="11" /> 
    <Directory Name="12" /> 
    <Directory Name="13" /> 
    <Directory Name="14" /> 
    <Directory Name="15" /> 
    <Directory Name="16" /> 
    </Directory> 
</Root> 
+1

nice..but而不是使用递归,你可以使用'dir.GetDirectories(“*”,System.IO.SearchOption.AllDirectories);' – Anirudha

+0

我不知道这个选项。我想它不维护树结构,而是只返回一个平坦的列表。 – Ondra