无法解析RSS提要

时间:2012-02-22 08:57:40

标签: xml windows-phone-7 rss xml-parsing xelement

我正在尝试解析来自http://b.fanfiction.net/atom/l/224/3/0/1/1/50/0/0/0/0的RSS源,但由于某种原因无法按元素名称进行搜索。我按照this page的说明进行操作,但他的例子似乎不适用于上面的小说网站。

这是我正在使用的代码:

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

我尝试通过运行:

列出doc的所有元素和子元素
  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}标题

{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}条目

...

我在这里应该做些什么的帮助?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的Linq to XML查询是按名称查找元素,但是您没有包含命名空间。如果您检查源文档,您将看到它具有以下命名空间:

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

请参阅working with XML namespaces上的MSDN文档。例如,以下内容将选择feed元素:

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

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

您需要将命名空间添加到所有您的元素名称。

相关问题