Создать 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;
}
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>