LINQ to XML: применение XPath

Может кто-нибудь сказать мне, почему эта программа не перечисляет какие-либо предметы? Связано ли это с пространством имен RDF?

using System;
using System.Xml.Linq;
using System.Xml.XPath;

class Program
{
    static void Main(string[] args)
    {
        var doc = XDocument.Load("http://seattle.craigslist.org/sof/index.rss");

        foreach (var item in doc.XPathSelectElements("//item"))
        {
            Console.WriteLine(item.Element("link").Value);
        }

        Console.Read();
    }
}

Ответ 1

Да, это абсолютно про пространство имен - хотя это пространство имен RSS, а не RDF. Вы пытаетесь найти элементы без пространства имен.

Использование пространства имен в XPath в .NET немного сложно, но в этом случае я бы просто использовал метод LINQ to XML Descendants:

using System;
using System.Linq;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        var doc = XDocument.Load("http://seattle.craigslist.org/sof/index.rss");
        XNamespace rss = "http://purl.org/rss/1.0/";

        foreach (var item in doc.Descendants(rss + "item"))
        {
            Console.WriteLine(item.Element(rss + "link").Value);
        }

        Console.Read();
    }
}