【问题标题】:Create XML DOM of a Directory structure创建目录结构的 XML DOM
【发布时间】:2012-10-16 15:09:15
【问题描述】:

如果有一个基于目录返回树节点的方法

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

【问题讨论】:

  • 哦...另一个 non linq2xml 解决方案..使用 linq2Xml..它比XmlDocument 简单

标签: c# xml xmldocument directoryentry xmldom


【解决方案1】:

看看 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>

【讨论】:

  • 不错..但是你可以使用dir.GetDirectories("*", System.IO.SearchOption.AllDirectories);而不是使用递归
  • 我不知道这个选项。我猜它不维护树结构而是只返回一个平面列表。
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2010-11-26
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多