Чтение данных XML с использованием LINQ, нескольких элементов с одинаковым именем - PullRequest
1 голос
/ 16 февраля 2011

Visual Studio 2010, Silverlight 4 и C #. У меня есть следующие данные, хранящиеся в файле XML:

<root>
      <element>TextHere</element>
      <element>TextHere</element>
      <element>TextHere</element>
</root>

Это мой текущий код.

XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("root")
                   select new
                   {
                       ElementContent = Elements.Element("Element").Value,
                   };

Этот код только помещает самый первый элемент в список, оставляя все остальные. Как я могу переписать этот код так, чтобы он захватывал ВСЕ элементы с именем «element» в файле XML?

Ответы [ 2 ]

5 голосов
/ 16 февраля 2011

Это будет сделано:

XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("element")
                   select new
                   {
                       ElementContent = Elements.Value
                   };

Или чуть более кратко в точечной записи:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => new { ElementContent = x.Value });

Обратите внимание, что после этого у вас есть только перечисление элементов, если вы хотите список (как подсказывает название вашей переменной), вы можете добавить .ToList() после выбора:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => new { ElementContent = x.Value })
                         .ToList();

Этот список будет содержать 3 элемента (на основе вашего примера XML. ) анонимного типа со свойством ElementContent. Если вам не нужно это свойство (а я думаю, что вам это не нужно), это упрощенная версия, которая просто возвращает список строк:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => x.Value)
                         .ToList();
2 голосов
/ 25 июня 2012

Это сделает это -

 XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
 var ElementsList = from Elements in xmlDoc.Descendants("root")
 select new
 {
   Element1 = (string)Elements.Element("element"),
   Element2 = Elements.Element("element").ElementsAfterSelf("element").First().Value,
   Element3 = Elements.Element("element").ElementsAfterSelf("element").ElementAt(1).Value,
 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...