我正在尝试解析来自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}条目
...
我在这里应该做些什么的帮助?
谢谢!
答案 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");
您需要将命名空间添加到所有您的元素名称。