我正在尝试从rss Feed中选择节点。它适用于Twitter,但我不能在Youtube上这样做。
string youtube = "http://gdata.youtube.com/feeds/api/users/CTVOlympics/uploads";
string twitter = "http://twitter.com/statuses/user_timeline/ctvolympics.rss";
//this populates the XmlNodeList object
XmlTextReader readerTwitter = new XmlTextReader(twitter);
XmlDocument docTwitter = new XmlDocument();
docTwitter.Load(readerTwitter);
XmlNodeList nodesTwitter = docTwitter.SelectNodes("/rss/channel/item");
//this doesn't populate the object
XmlTextReader readerYoutube = new XmlTextReader(youtube);
XmlDocument docYoutube = new XmlDocument();
docYoutube.Load(readerYoutube);
XmlNodeList nodesYoutube = docYoutube.SelectNodes("/feed/entry");
任何想法?
答案 0 :(得分:3)
您尝试在空命名空间中选择节点“条目”,而您应该尝试在命名空间“http://www.w3.org/2005/Atom”中选择节点“条目”。
您可以使用XMLNamespaceManager
指定默认命名空间:
XmlNamespaceManager nsmanager = new XmlNamespaceManager(docYoutube.NameTable);
nsmanager.AddNamespace(String.Empty, "http://www.w3.org/2005/Atom");
或者您可以使用"/*[local-name()='feed']/*[local-name()='entry']"
答案 1 :(得分:1)
指定命名空间。
答案 2 :(得分:1)
如果要显示XPath查询的结果,可以使用XpathVisualizer。 这是一个WinForms工具。加载要查询的XML文档,键入查询,查看结果。
alt text http://i45.tinypic.com/2jb409.jpg
免。开源。
答案 3 :(得分:0)
如果它没有生成错误,则必须是因为xml文档不包含<feed>
- 元素,或<entry>
元素与<feed>
- 父元素。 / p>
答案 4 :(得分:0)
尝试使用//代替/来解决问题的基础。所以像//输入我的工作更好,因为它将探索寻找你的请求的深度。
但我的问题是XPath查询是否实际上正在检索任何内容。
答案 5 :(得分:0)
string youtube = "http://gdata.youtube.com/feeds/api/users/CTVOlympics/uploads";
string twitter = "http://twitter.com/statuses/user_timeline/ctvolympics.rss";
//this populates the XmlNodeList object
XmlDocument docTwitter;
using (var readerTwitter = XmlReader.Create(twitter))
{
docTwitter = new XmlDocument();
docTwitter.Load(readerTwitter);
}
XmlNodeList nodesTwitter = docTwitter.SelectNodes("/rss/channel/item");
//this doesn't populate the object
XmlDocument docYoutube;
using (var readerYoutube = XmlReader.Create(youtube))
{
docYoutube = new XmlDocument();
docYoutube.Load(readerYoutube);
}
XmlNamespaceManager ns = new XmlNamespaceManager(docYoutube.NameTable);
ns.AddNamespace("atom", "http://www.w3.org/2005/Atom");
XmlNodeList nodesYoutube = docYoutube.SelectNodes("/atom:feed/atom:entry", ns);
答案 6 :(得分:0)
尝试一下:"/*[local-name()='feed']/*[local-name()='entry']"