سؤال

لذلك أنا أعمل حاليًا على تطبيق قارئ EPUB ، وكنت أقرأ من خلال مجموعة من ملفات XML العادية على ما يرام مع System.xml و XmlDocument:

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "META-INF/container.xml"));
XmlNodeList xnl = xmldoc.GetElementsByTagName("rootfile");

ومع ذلك ، أحاول الآن فتح ملفات XHTML التي تحتوي على نص الكتاب الفعلي ، وهي ملفات XHTML. الآن لا أعرف حقًا الفرق بين الاثنين ، لكنني أحصل على الخطأ التالي مع هذا الرمز (في نفس المستند ، باستخدام نفس متغير XMLDOCUMINE و XMLNODELIST)

xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "OEBPS/part1.xhtml"));

"لم يكن WebException غير معتمد: لقد أعاد الخادم البعيد خطأ: (503) خادم غير متوفر"

إنها وثيقة محلية ، لذلك أنا لا أفهم لماذا تعطي هذا الخطأ؟ أي مساعدة سيكون موضع تقدير كبير. قون

لدي رمز المصدر الكامل هنا إذا كان يساعد:http://drop.io/epubtest

(أنا أعرف ال ePubConstructor.ParseDocument() الطريقة فوضوية فظيعة ، أحاول فقط تشغيلها في الوقت الحالي قبل تقسيمها إلى فصول)

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

المحلول

جرب الكود التالي غير المختبر:

XmlDocument xmldoc = new XmlDocument(); 
XmlReaderSettings settings = new XmlReaderSettings
{
    XmlResolver = new XmlUrlResolver()
};
using (var reader = XmlReader.Create(
    Path.Combine(Directory.GetCurrentDirectory(), 
                 "OEBPS/part1.xhtml"), settings))
{
    xmlDoc.Load(reader);
}

نصائح أخرى

حاول إزالة doctype من ملف XHTML ، وربما يكون لديك رابط إلى DTD خارجي.

جرب الرمز التالي:

xmldocument xmldoc = new xmldocument () ؛

doc.xmlresolver = null ؛ // هذا يتجاهل DTD

xmldoc.load (path.combine (directory.getCurrentDirectory () ، "meta-inf/container.xml") ؛

xmlnodelist xnl = xmldoc.getElementSbyTagName ("rootfile") ؛

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