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

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

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

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

Решение задачи: «Считать документ XML с диска, а затем представить его как дерево»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Xml.Linq;
  5.  
  6. namespace ConsoleApplication72
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             string s = @"<?xml version=""1.0"" encoding=""WINDOWS-1251""?>
  13. <a>
  14.    <b>
  15.        <c>Info_C</c>
  16.        <e>Info_E</e>
  17.    </b>
  18.    <d>Info_D</d>
  19. </a>";
  20.             var doc = XDocument.Load(new StringReader(s));
  21.             foreach (var xPath in GetXPaths(doc.Root))
  22.             {
  23.                 Console.WriteLine(xPath);
  24.             }
  25.             Console.ReadKey();
  26.         }
  27.  
  28.         private static IEnumerable<string> GetXPaths(XElement element)
  29.         {
  30.             string localName = element.Name.LocalName;
  31.             if (!element.HasElements)
  32.             {
  33.                 yield return localName + "/" + element.Value;
  34.             }
  35.             else
  36.             {
  37.                 foreach (var descendantNode in element.Elements())
  38.                 {
  39.                     foreach (string xPath in GetXPaths(descendantNode))
  40.                     {
  41.                         yield return localName + "/" + xPath;
  42.                     }
  43.                 }
  44.             }
  45.         }
  46.     }
  47. }

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


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

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

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы