Считать документ XML с диска, а затем представить его как дерево - C#
Формулировка задачи:
Здравствуйте, я новичок. Язык C#
Задача в том, чтобы считать документ doc1.xml с диска, а затем представить его как дерево и это дерево записать в виде массива строк, где каждая строка есть путь от корня дерева до конкретного листа.
То есть, к примеру, документ должен быть представлен в виде набора из трех строк
a/b/c/Info_C
a/b/e/Info_E
a/d/Info_D
Причем я не уверен, что разделять теги в строке нужно именно "/", можно спецсимвол какой придумать. Но тут пусть профессионалы посоветуют)
Все говорят, что это просто, но я три дня читал про всякие DOM структуры и XmlSerializer, жутко устал, но код в моей голове так и не сложился.
Нет ли вообще готовых решений по этой теме? Друзья, если кому это не трудно, напишите такую функцию, чтобы на вход принимала адрес документа на диске, а возвращала такой вот набор строк, это ведь вам всего 10 минут кодинга, а мне поможет очень) Или ссылку на готовую реализацию дайте.
Заранее благодарен всем откликнувшимся!
<?xml version="1.0" encoding="WINDOWS-1251"?>
<a>
<b>
<c>Info_C</c>
<e>Info_E</e>
</b>
<d>Info_D</d>
</a>
Решение задачи: «Считать документ XML с диска, а затем представить его как дерево»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
namespace ConsoleApplication72
{
class Program
{
static void Main(string[] args)
{
string s = @"<?xml version=""1.0"" encoding=""WINDOWS-1251""?>
<a>
<b>
<c>Info_C</c>
<e>Info_E</e>
</b>
<d>Info_D</d>
</a>";
var doc = XDocument.Load(new StringReader(s));
foreach (var xPath in GetXPaths(doc.Root))
{
Console.WriteLine(xPath);
}
Console.ReadKey();
}
private static IEnumerable<string> GetXPaths(XElement element)
{
string localName = element.Name.LocalName;
if (!element.HasElements)
{
yield return localName + "/" + element.Value;
}
else
{
foreach (var descendantNode in element.Elements())
{
foreach (string xPath in GetXPaths(descendantNode))
{
yield return localName + "/" + xPath;
}
}
}
}
}
}