Не удается разобрать канал RSS - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь разобрать канал 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}feed

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

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

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

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

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

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

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

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

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

...

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

Спасибо!

1 Ответ

3 голосов
/ 22 февраля 2012

Ваш запрос 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");

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

...