Как я могу создать единый список из родительского и дочернего узлов из XML с помощью Linq

Мне нужно создать один список из файла xml, где есть некоторое значение из родительского и некоторого из дочернего узла с использованием Linq, затем мне нужно связать этот список в одном представлении списка в пользовательском интерфейсе.

<item>
  <name>AAA</name>
  <id>94926DD03DB67FE30B456E50A0C34DF6</id>
  <files>
    <update>1533861455395</update>
    <file>
      <name>1532997455395.pdf</name>
      <update>1532997455395</update>
    </file>
    <file>
      <name>1533861455395.pdf</name>
      <update>1533861455395</update>
    </file>
  </files>
</item>
<item>
  <name>BBB</name>
  <id>A16779822115170AECAD570D0139E8F3</id>
  <files>
    <file>
      <name>1530405455395.pdf</name>
      <update>1530405455395</update>
    </file>
  </files>
</item>

Код, который я написал, где имя файла отображается правильно, но значение обновления не возвращается

public void xml()
    {
        XDocument loadedData = XDocument.Load(xmlUrl);
        var lstBooks = loadedData.Descendants("item").Select(x =>
                        new
                        {
                            FileName = x.Element("name").Value,
                            Update = x.Elements("files").Select(y => y.Element("update").Value),

                        }).ToList();
    }

person worker ali    schedule 03.09.2018    source источник
comment
Не могли бы вы указать желаемую структуру вывода? Пока мало что понятно из предоставленной вами информации   -  person ManishM    schedule 04.09.2018


Ответы (1)


Я думаю, это то, что вы хотите (список объектов, содержащих имя файла и значение обновления):

var lstBooks = loadedData.Descendants("file").Select(x =>
    new {
         FileName = x.Element("name").Value,
         Update = x.Element("update").Value
        }).ToList();

Если вам нужно имя элемента и список обновлений, используйте это:

var lstBooks = loadedData.Descendants("item").Select(x =>
    new {
         FileName = x.Element("name").Value,
         Update = x.Elements("files").Select(y => y.Element("update").Value).ToList(),
        }).ToList();
person ChristianMurschall    schedule 03.09.2018
comment
Я хочу второй, но все равно возвращает {System.Collections.Generic.List‹string›} } - person worker ali; 03.09.2018
comment
Ну конечно. Ваш первый элемент AAA содержит два файла. Как вы хотите отличить, какой из них вы хотите? Ваша структура XML очень странная, так как она потеряла повторяющиеся имена элементов в разных частях вашего дерева. Вот почему очень сложно сказать, какой элемент вам нужен! - person ChristianMurschall; 03.09.2018
comment
Я думаю, что ошибка связана с тем, что у вас нет тега update xml непосредственно в теге файлов во втором элементе. Было бы проще, если бы вы использовали более четкие имена полей xml. - person Rachael M; 03.09.2018
comment
мне нужен только первый - person worker ali; 03.09.2018