القراءة في سلسلة XML مع مساحات الأسماء لاستخدامها في تحويل XSL

StackOverflow https://stackoverflow.com/questions/121309

  •  02-07-2019
  •  | 
  •  

سؤال

في موقع ويب ASP.NET 2.0، لدي سلسلة تمثل بعض ملفات XML جيدة التنسيق.أقوم حاليًا بإنشاء كائن XmlDocument به وتشغيل تحويل XSL لعرضه في نموذج ويب.كان كل شيء يعمل بشكل جيد حتى بدأ إدخال XML في احتواء مساحات الأسماء.

كيف يمكنني القراءة في هذه السلسلة والسماح بمساحات الأسماء؟

لقد قمت بتضمين الكود الحالي أدناه.يأتي مصدر السلسلة من عقدة مشفرة بتنسيق HTML في موجز WordPress RSS.

XPathNavigator myNav= myPost.CreateNavigator();
XmlNamespaceManager myManager = new XmlNamespaceManager(myNav.NameTable);
myManager.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/");
string myPost = HttpUtility.HtmlDecode("<post>" +
    myNav.SelectSingleNode("//item[1]/content:encoded", myManager).InnerXml +
    "</post>");
XmlDocument myDocument = new XmlDocument();
myDocument.LoadXml(myPost.ToString());

الخطأ في السطر الأخير:

"System.Xml.XmlException:"w" هي مساحة اسم غير معلنة.السطر 12، موقف 201.في System.Xml.XmlTextReaderImpl.Throw(الاستثناء e)..."

هل كانت مفيدة؟

المحلول

الشعور الغريزي - تم إسقاط إحدى مساحات الأسماء المعلنة في //content:encoding (ربما لأنك تستخدم خاصية .InnerXml الحرفية)

ما هو تقييم مساحة الاسم "w" في myNav DOM؟ستحتاج إلى إضافة xmlns:w= إلى عقدة النشر الخاصة بك.ومن المحتمل أن يكون هناك آخرون أيضًا.

نصائح أخرى

الرمز الخاص بك يبدو صحيحا.

من المحتمل أن تكون المشكلة في مستند xml الذي تحاول تحميله.يجب أن تحتوي على عناصر ذات البادئة "w"، دون الإعلان عن تلك البادئة في مستند XML

على سبيل المثال، يجب أن يكون لديك:

<test xmlns:w="http://...">
  <w:elementInWNamespace />
</test>

(من المحتمل أن المستند الخاص بك يفتقد ملحق xmlns:w="http://")

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