Не удается проанализировать RSS-канал

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

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

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}

{http://www.w3.org/2005/Atom} автор

{http://www.w3.org/2005/Atom} title

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

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

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

{http://www.w3.org/2005/Atom} id

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

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

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

...

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

Спасибо!


person Zain Rizvi    schedule 22.02.2012    source источник


Ответы (1)


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

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

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

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

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

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

person ColinE    schedule 22.02.2012