views:

250

answers:

1

Hello..

I am trying to get all of the "video" elements and their attributes from an XML file that looks like this:

<?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>

The following will only select the root node and all of the children. I would like to get all of the 'video' elements into the IEnumerable. Can someone tell me what I'm doing wrong?

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

The above returns a collection with a length == 1. It contains the root element and all the children.

+1  A: 

You want to select Descendants("video"). "videos" appears to be your root entry, of which there is 1 element. The inner elements of videos are what you want to query.

Example:

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

That gives you an IEnumerable of an anonymous type with two string properties. Otherwise, you could simply select "video" and get an IEnumerable<XElement>, which you would further parse as needed.

Anthony Pegram
Thanks! I thought this method was supposed to return all the child elements of the specified element name. Therefore I was expecting all the children of 'videos'.
Nick
Oh, I see. That would be sort of like a .DescendantsOf(name) method.
Anthony Pegram