SelectNodes 不适用于 *** 提要

Posted

技术标签:

【中文标题】SelectNodes 不适用于 *** 提要【英文标题】:SelectNodes not working on *** feed 【发布时间】:2010-09-06 16:29:11 【问题描述】:

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

我已经通过从 feed 标记中删除所有属性来使其工作,但这是一个 hack,我想正确地做到这一点。那么,如何将 SelectNodes 与 atom 提要一起使用?

这是提要的 sn-p。

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:thr="http://purl.org/syndication/thread/1.0">

<title type="html">***.com - Questions tagged: c</title>
<link rel="self" href="http://***.com/feeds/tag/c" type="application/atom+xml" />
<subtitle>Check out the latest from ***.com</subtitle>
<updated>2008-08-24T12:25:30Z</updated>
<id>http://***.com/feeds/tag/c</id>
<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/2.5/rdf</creativeCommons:license>


 <entry>
   <id>http://***.com/questions/22901/what-is-the-best-way-to-communicate-with-a-sql-server</id>
   <title type="html">What is the best way to communicate with a SQL server?</title>
   <category scheme="http://***.com/feeds/tag/c/tags" term="c" /><category scheme="http://***.com/feeds/tag/c/tags" term="c++" /><category scheme="http://***.com/feeds/tag/c/tags" term="sql" /><category scheme="http://***.com/feeds/tag/c/tags" term="mysql" /><category scheme="http://***.com/feeds/tag/c/tags" term="database" />  
   <author><name>Ed</name></author>
   <link rel="alternate" href="http://***.com/questions/22901/what-is-the-best-way-to-communicate-with-a-sql-server" />
   <published>2008-08-22T05:09:04Z</published>
   <updated>2008-08-23T04:52:39Z</updated>
   <summary type="html">&lt;p&gt;I am going to be using c/c++, and would like to know the best way to talk to a MySQL server.  Should I use the library that comes with the server installation?  Are they any good libraries I should consider other than the official one?&lt;/p&gt;</summary>
   <link rel="replies" type="application/atom+xml" href="http://***.com/feeds/question/22901/answers" thr:count="2"/>
   <thr:total>2</thr:total>
 </entry>


</feed>

解决方案

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

// successful
XmlNodeList itemList = doc.DocumentElement.SelectNodes("atom:entry", nsmgr);

【问题讨论】:

Does -> nsmgr.AddNamespace("atom", "w3.org/2005/Atom"); 【参考方案1】:

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

所以你可以将“http://www.w3.org/2005/Atom”注册为“atom”,然后为“atom:entry”做一个SelectNodes。

【讨论】:

【参考方案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,则需要它。你看到了什么错误?

【讨论】:

【参考方案3】:

您猜对了:您要求的节点不在命名空间中,但这些节点在命名空间中。

问题描述及解决方法:http://weblogs.asp.net/wallen/archive/2003/04/02/4725.aspx

【讨论】:

【参考方案4】:

我只是想用..

XmlNodeList itemList = xmlDoc.DocumentElement.SelectNodes("entry");

但是,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);

类似的东西?

【讨论】:

以上是关于SelectNodes 不适用于 *** 提要的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 不适用于情节提要

安全区域布局指南不适用于情节提要中的 UITableViewController

Instagram ?__a=1&max_id=<end_cursor> 不适用于公共用户提要

拉动刷新不适用于少量单元格

awakeFromNib() 不适用于模拟指标

停止动画不适用于图像视图