Считать документ XML с диска, а затем представить его как дерево - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, я новичок. Язык C# Задача в том, чтобы считать документ doc1.xml с диска, а затем представить его как дерево и это дерево записать в виде массива строк, где каждая строка есть путь от корня дерева до конкретного листа. То есть, к примеру, документ
<?xml version="1.0" encoding="WINDOWS-1251"?>
<a>
    <b>
        <c>Info_C</c>
        <e>Info_E</e>
    </b>
    <d>Info_D</d>
</a>
должен быть представлен в виде набора из трех строк a/b/c/Info_C a/b/e/Info_E a/d/Info_D Причем я не уверен, что разделять теги в строке нужно именно "/", можно спецсимвол какой придумать. Но тут пусть профессионалы посоветуют) Все говорят, что это просто, но я три дня читал про всякие DOM структуры и XmlSerializer, жутко устал, но код в моей голове так и не сложился. Нет ли вообще готовых решений по этой теме? Друзья, если кому это не трудно, напишите такую функцию, чтобы на вход принимала адрес документа на диске, а возвращала такой вот набор строк, это ведь вам всего 10 минут кодинга, а мне поможет очень) Или ссылку на готовую реализацию дайте. Заранее благодарен всем откликнувшимся!

Решение задачи: «Считать документ 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;
                    }
                }
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы