C# парсинг многомерного xml файла

126
26 ноября 2019, 19:10

Имею XML файл большой вложенности по протоколу CommerceML Сам файл достаточно большой поэтому выложу его по ссылке XML file

Хочу получить из него некоторые поля, вот мой код

var import = XDocument.Load("import/import.xml").Descendants("Каталог").Elements("Товары")
             .Elements("Товар")
             .Select(m => new
             {
                 name = m.Elements("Наименоавние")
                     .Select(n => n.Value),

                 atr = m.Elements("Артикул")
                     .Select(a => a.Value),
                 opt = m.Elements("ЗначенияСвойств").Elements("ЗначенияСвойства")
                     .Select(o => new
                     {
                         id = o.Element("Ид").Value,
                         value = o.Element("Значение").Value
                     })
             })
             .ToArray();
         var str = new StreamWriter("models.txt");
         foreach (var im in import)
         {
             str.WriteLine(value: im.name);
             str.WriteLine(im.atr);
             str.WriteLine(im.opt);
             str.WriteLine();
         }
         str.Close();
         Console.WriteLine("done");

Однако на выходе получаю не значения элементов, а их типы. Что я делаю не так?

Answer 1

Победил сам себя.

var import = XDocument.Load("import/import.xml").Descendants("Каталог").Elements("Товары")
             .Elements("Товар")
             .Select(m => new
             {
                 name = (string) m.Element("Наименование"),
                 atr = (string)m.Element("Артикул"),
                 opt = m.Elements("ЗначенияСвойств").Elements("ЗначенияСвойства")
                     .Select(o => new
                     {
                         id = o.Element("Ид").Value,
                         value = o.Element("Значение").Value
                     }).ToArray()
             });

         var str = new StreamWriter("models.txt");
         foreach (var im in import)
         {
             str.WriteLine(im.name);
             str.WriteLine(im.atr);
             foreach (var ot in im.opt)
             {
                 str.WriteLine(ot.id);
                 str.WriteLine(ot.value);
             }
             str.WriteLine("---------------------------------------------------");
             str.WriteLine();
         }
         str.Close();

         Console.WriteLine("done");
READ ALSO
Изменение размеров изображения

Изменение размеров изображения

Пользователь выбирает картинку для своего аватара, например с разрешением 1920 на 1080 и нажимает кнопку загрузить изображениеКартинка превращается...

127
Построчная обработка файла

Построчная обработка файла

Необходимо построчно обработать файлОсновная проблема заключается в том, что нужна вся строка целиком, то есть символы переноса строки,...

97
Правильное составление запроса insert into в c#

Правильное составление запроса insert into в c#

Нужно дописать запрос insert into в c#Есть два текст бокс и бд access

99