C# 选择不在stackoverflow提要上工作的节点

C# 选择不在stackoverflow提要上工作的节点,c#,.net,rss,atom-feed,C#,.net,Rss,Atom Feed,我试图在我的rss阅读器中添加对stackoverflow提要的支持,但是SelectNodes和SelectSingleNode没有效果。这可能与我还不了解的ATOM和xml名称空间有关 我已经通过删除提要标记中的所有属性使其正常工作,但这是一个黑客行为,我希望能够正确地完成。那么,如何在atom提要中使用SelectNodes 下面是提要的一个片段 StackOverflow.com-问题标记:c 查看StackOverflow.com上的最新版本 2008-08-24T12:25:30Z

我试图在我的rss阅读器中添加对stackoverflow提要的支持,但是SelectNodesSelectSingleNode没有效果。这可能与我还不了解的ATOM和xml名称空间有关

我已经通过删除提要标记中的所有属性使其正常工作,但这是一个黑客行为,我希望能够正确地完成。那么,如何在atom提要中使用SelectNodes

下面是提要的一个片段


StackOverflow.com-问题标记:c
查看StackOverflow.com上的最新版本
2008-08-24T12:25:30Z
http://stackoverflow.com/feeds/tag/c
http://www.creativecommons.org/licenses/by-nc/2.5/rdf
http://stackoverflow.com/questions/22901/what-is-the-best-way-to-communicate-with-a-sql-server
与SQL server通信的最佳方式是什么?
预计起飞时间
2008-08-22T05:09:04Z
2008-08-23T04:52:39Z
我将使用c/c++,并想知道与MySQL服务器对话的最佳方式。我应该使用服务器安装附带的库吗?除了官方的图书馆以外,它们是否是我应该考虑的好图书馆?
2.

解决方案
您猜对了:您请求的节点不在名称空间中,但这些节点在名称空间中


问题和解决方案说明:

您可能需要添加一个XmlNamespaceManager

XmlDocument document = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("creativeCommons", "http://backend.userland.com/creativeCommonsRssModule");
// AddNamespace for other namespaces too.
document.Load(feed);
如果要在使用SelectNodes的文档上调用它们,则需要使用它。您看到了什么错误?

我只想使用

XmlNodeList itemList = xmlDoc.DocumentElement.SelectNodes("entry");
但是,条目标记属于哪个名称空间?我假设xmlns=”http://www.w3.org/2005/Atom,但它没有标题,因此如何添加该命名空间

XmlDocument document = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("", "http://www.w3.org/2005/Atom");
document.Load(feed);

诸如此类?

不要将XML文件中的名称空间名称与名称空间管理器的名称空间名称混淆。它们都是捷径,不一定要匹配

因此,您可以将“”注册为“atom”,然后为“atom:entry”执行SelectNodes操作。

Does->nsmgr.AddNamespace(“atom”,”;
XmlDocument document = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("", "http://www.w3.org/2005/Atom");
document.Load(feed);