Как получить список дочерних элементов из объекта XDocument? - PullRequest
4 голосов
/ 30 марта 2010

Я пытаюсь получить все элементы «видео» и их атрибуты из файла XML, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<videos>
  <video title="video1" path="videos\video1.wma"/>
  <video title="video2" path="videos\video2.wma"/>
  <video title="video3" path="videos\video3.wma"/>
</videos>

Следующее выберет только корневой узел и все дочерние узлы. Я хотел бы получить все элементы «видео» в IEnumerable. Может кто-нибудь сказать мне, что я делаю не так?

 IEnumerable<XElement> elements = from xml in _xdoc.Descendants("videos")
                           select xml;

Вышеприведенное возвращает коллекцию длиной == 1. Она содержит корневой элемент и все дочерние элементы.

1 Ответ

10 голосов
/ 30 марта 2010

Вы хотите выбрать Потомки («видео»). "videos" - это ваша корневая запись, в которой есть 1 элемент. Внутренние элементы видео - это то, что вы хотите запросить.

Пример:

var query = from video in document.Descendants("video")
            select new
            {
                Title = video.Attribute("title").Value,
                Path = video.Attribute("path").Value
            };

Это дает вам IEnumerable анонимного типа с двумя строковыми свойствами. В противном случае, вы можете просто выбрать «видео» и получить IEnumerable<XElement>, который вы будете дополнительно анализировать при необходимости.

...