创建目录结构的XML DOM



如果有一种基于目录返回treeNode的方法

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

但是,我需要创建目录插座的XML DOM,但是我是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;
        } 

看一下linq到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>

最新更新