c# .net rss atom-feed

c# - SelectNodes no funciona en la alimentación de stackoverflow



.net rss (4)

Es posible que deba agregar un 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);

Es necesario si desea llamar a SelectNodes en un documento que los usa. ¿Qué error estás viendo?

Estoy tratando de agregar soporte para feeds stackoverflow en mi lector rss pero SelectNodes y SelectSingleNode no tienen ningún efecto. Esto es probablemente algo relacionado con los espacios de nombres ATOM y xml que aún no entiendo.

He conseguido que funcione eliminando todos los atributos de la etiqueta de fuente , pero eso es un truco y me gustaría hacerlo correctamente. Entonces, ¿cómo se usan SelectNodes con alimentaciones de átomos?

Aquí hay un fragmento del feed.

<?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">StackOverflow.com - Questions tagged: c</title> <link rel="self" href="http://stackoverflow.com/feeds/tag/c" type="application/atom+xml" /> <subtitle>Check out the latest from StackOverflow.com</subtitle> <updated>2008-08-24T12:25:30Z</updated> <id>http://stackoverflow.com/feeds/tag/c</id> <creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/2.5/rdf</creativeCommons:license> <entry> <id>http://stackoverflow.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://stackoverflow.com/feeds/tag/c/tags" term="c" /><category scheme="http://stackoverflow.com/feeds/tag/c/tags" term="c++" /><category scheme="http://stackoverflow.com/feeds/tag/c/tags" term="sql" /><category scheme="http://stackoverflow.com/feeds/tag/c/tags" term="mysql" /><category scheme="http://stackoverflow.com/feeds/tag/c/tags" term="database" /> <author><name>Ed</name></author> <link rel="alternate" href="http://stackoverflow.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://stackoverflow.com/feeds/question/22901/answers" thr:count="2"/> <thr:total>2</thr:total> </entry> </feed>


La solución

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);



No confunda los nombres del espacio de nombres en el archivo XML con los nombres del espacio de nombres para su administrador de espacio de nombres. Ambos son atajos, y no necesariamente tienen que coincidir.

Entonces puede registrar " http://www.w3.org/2005/Atom " como "átomo", y luego hacer un SelectNodes para "átomo: entrada".


Solo quiero usar ...

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

pero, ¿en qué espacio de nombres caen las etiquetas de entrada ? Asumiría xmlns = "http://www.w3.org/2005/Atom", pero no tiene título, ¿cómo podría agregar ese espacio de nombres?

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

¿Algo como eso?