2012-02-22 1 views
1

Я пытаюсь разобрать RSS-канал от http://b.fanfiction.net/atom/l/224/3/0/1/1/50/0/0/0/0, но по какой-то причине не удается найти по имени элемента. Я следую инструкциям от this page, но его пример, похоже, не работает на сайте фанфики.Не удается разобрать RSS-канал

Вот код, который я использую:

private void getData_Click(object sender, RoutedEventArgs e) 
{ 
    String rss = "http://b.fanfiction.net/atom/l/224/3/0/1/1/50/0/0/0/0"; 

    HttpWebRequest request = HttpWebRequest.CreateHttp(rss); 
    request.BeginGetResponse(
     asyncCallback => 
     { 
      string data = null; 

      using (WebResponse response = request.EndGetResponse(asyncCallback)) 
      { 
       using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
       { 
        data = reader.ReadToEnd(); 
       } 
      } 
      Deployment.Current.Dispatcher.BeginInvoke(() => HttpsCompleted(data)); 
     } 
     , null); 
} 

private void HttpsCompleted(string feedString) 
{ 
    // build XML DOM from feed string 
    XDocument doc = XDocument.Parse(feedString); 

    // show title of feed in TextBlock 
    XElement feed = doc.Element("feed"); 
    XElement title = feed.Element("title"); 
    String txt_title = title.Value; 
    txtBlk_FeedDescription.Text = txt_title; 
    // add each feed item to a ListBox 
    foreach (var item in doc.Descendants("entry")) 
    { 
     listBox1.Items.Add(item.Element("title").Value); 
    } 
} 

Я пытался просто перечислить все элементы и вложенные элементы док, запустив:

foreach (XElement element in doc.Elements()) 
     { 
      txtBlk_FeedDescription.Text += element.Name.ToString() + "\n"; 
      foreach (XElement subelement in element.Elements()) 
      { 
       txtBlk_FeedDescription.Text += subelement.Name.ToString() + "\n"; 
      } 
     } 

И что в результате в следующем списке:

{http://www.w3.org/2005/Atom} кормить

{ 10} автор

{http://www.w3.org/2005/Atom} название

{http://www.w3.org/2005/Atom} субтитров

{http://www.w3.org/2005/Atom} ссылка

{http://www.w3.org/2005/Atom} обновлено

{http://www.w3.org/2005/Atom} идентификатор

{http://www.w3.org/2005/Atom} запись

{} http://www.w3.org/2005/Atom запись

{} http://www.w3.org/2005/Atom запись

...

Любая помощь на том, что я должен здесь делать?

Спасибо!

ответ

3

Ваш запрос Linq to XML ищет элементы по имени, однако вы не включаете пространство имен. Если вы проверить исходный документ вы увидите, что он имеет следующие пространства имен дэ:

xmlns="http://www.w3.org/2005/Atom" 

Смотрите документ MSDN на working with XML namespaces. Например, следующий будет выбрать feed элемент:

XNamespace ns = "http://www.w3.org/2005/Atom"; 

XElement feed = doc.Element(ns + "feed"); 

Вам нужно добавить пространство имен всех ваших имен элементов.