2009-10-17 19 views
11

¿Puede alguien decirme por qué este programa no enumera ningún elemento? ¿Tiene algo que ver con el espacio de nombres RDF?LINQ to XML: aplicando un 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(); 
    } 
} 

Respuesta

16

Sí, es absolutamente sobre el espacio de nombres, aunque es el espacio de nombres RSS, no el espacio RDF. Está tratando de encontrar elementos sin un espacio de nombre.

El uso de un espacio de nombres en XPath en .NET es un poco difícil, pero en este caso me gustaría sólo tiene que utilizar el LINQ to XML Descendants método en su lugar:

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

Ganador ganador, cena del pollo. – core

+1

Un ejemplo completo de análisis RDF, RSS y ATOM en C# se puede encontrar aquí http://www.jarloo.com/rumormill-5/ también está disponible el código fuente completo. – Kelly

Cuestiones relacionadas