سؤال

أحاول إضافة دعم لموجزات Stackoverflow في قارئ RSS الخاص بي ولكن حدد العقد و حدد عقدة واحدة ليس لها أي تأثير.من المحتمل أن يكون هذا متعلقًا بمساحات أسماء ATOM وxml التي لم أفهمها بعد.

لقد جعلته يعمل عن طريق إزالة جميع السمات من ملف يٌطعم العلامة، ولكن هذا اختراق وأود أن أفعل ذلك بشكل صحيح.إذن كيف تستخدم حدد العقد مع تغذية الذرة؟

إليك مقتطف من الخلاصة.

<?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>


الحل

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);
هل كانت مفيدة؟

المحلول

لا تخلط بين أسماء مساحة الاسم في ملف XML وأسماء مساحة الاسم لمدير مساحة الاسم لديك.كلاهما اختصارات، وليس من الضروري أن يتطابقا.

حتى تتمكن من التسجيل "http://www.w3.org/2005/Atom" كـ "atom"، ثم قم بإجراء SelectNodes لـ "atom:entry".

نصائح أخرى

قد تحتاج إلى إضافة 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 في مستند يستخدمها.ما الخطأ الذي تراه؟

لقد خمنت بشكل صحيح:أنت تطلب عقدًا ليست في مساحة اسم، ولكن هذه العقد موجودة في مساحة اسم.

وصف المشكلة والحل: http://weblogs.asp.net/wallen/archive/2003/04/02/4725.aspx

أريد فقط أن أستفيد..

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

شئ مثل هذا؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top