2012-10-16 343 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