无法在Feed中获得任何结果。 feedXML具有正确的数据。
XDocument feedXML = XDocument.Load(@"http://search.twitter.com/search.atom?q=twitter");
var feeds = from entry in feedXML.Descendants("entry")
select new
{
PublicationDate = entry.Element("published").Value,
Title = entry.Element("title").Value
};
我错过了什么?
答案 0 :(得分:3)
您需要指定命名空间:
// This is the default namespace within the feed, as specified
// xmlns="..."
XNamespace ns = "http://www.w3.org/2005/Atom";
var feeds = from entry in feedXML.Descendants(ns + "entry")
...
与所有我使用的其他XML API相比,LINQ to XML中的命名空间处理非常简单:)
答案 1 :(得分:2)
您需要在Descendents和Element方法上指定命名空间。
XDocument feedXML = XDocument.Load(@"http://search.twitter.com/search.atom?q=twitter");
XNamespace ns = "http://www.w3.org/2005/Atom";
var feeds = from entry in feedXML.Descendants(ns + "entry")
select new
{
PublicationDate = entry.Element(ns + "published").Value,
Title = entry.Element(ns + "title").Value
};
答案 2 :(得分:0)
如果查看HTTP请求返回的XML,您将看到它定义了一个XML命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" ...>
<id>tag:search.twitter.com,2005:search/twitter</id>
...
</feed>
XML就像C#一样,如果你使用一个带有错误名称空间的元素名称,它就不被认为是同一个元素!您需要在查询中添加所需的namepsace:
private static string AtomNamespace = "http://www.w3.org/2005/Atom";
public static XName Entry = XName.Get("entry", AtomNamespace);
public static XName Published = XName.Get("published", AtomNamespace);
public static XName Title = XName.Get("title", AtomNamespace);
var items = doc.Descendants(AtomConst.Entry)
.Select(entryElement => new FeedItemViewModel()
new {
Title = entryElement.Descendants(AtomConst.Title).Single().Value,
...
});
答案 3 :(得分:0)
问题出在feedXML.Descendants("entry")
。这返回0结果
根据{{3}},您需要输入完全限定的XName