2009-10-17 31 views
11

有人能告訴我爲什麼這個程序不枚舉任何項目?它與RDF命名空間有什麼關係?LINQ to XML:應用XPath

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(); 
    } 
} 

回答

16

是的,這絕對是關於命名空間的 - 儘管它是RSS命名空間,而不是RDF命名空間。您正在嘗試查找沒有命名空間的項目。

使用的XPath在.NET命名空間是有點難,但在這種情況下,我只使用LINQ到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(); 
    } 
} 
+5

獲獎得主,雞晚餐。 – core 2009-10-17 20:14:25

+1

在C#中解析RDF,RSS和ATOM的完整示例可以在這裏找到http://www.jarloo.com/rumormill-5/也可以找到完整的源代碼。 – Kelly 2011-11-01 05:00:02