C# Ссылка на необъявленный объект подстановки "nbsp"

Обрабатываю книги формата fb2. Для проверки работоспособности было скачано множество книг из интернета. Сначала закачиваю книгу в программу

    XmlDocument xDoc = new XmlDocument();
    try
    {
        xDoc.Load("Book.fb2");                
    }

появилась ошибка в некоторых книгах "Ссылка на необъявленный объект подстановки nbsp." (кроме nbsp могут быть другие). Поискав в интернете, поняла, что надо использовать XmlReaderSettings

    XmlDocument xDoc = new XmlDocument();
    try
    {
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        settings.ValidationType = ValidationType.DTD;
        XmlReader reader = XmlReader.Create(new StringReader(File.ReadAllText("Book.fb2")), settings);
        xDoc.Load(reader);
    }

Но это не работает, ошибка по прежнему та же самая. Кроме Parse пробовал и другие варианты. Результат тот же. Помогите разобраться


Ответы (1 шт):

Автор решения: N K

Нашел все таки решение, с использованием того что я уже начинал, ошибка чтения необъявленных сущностей html ушла. все при помощи встроенных средств.

using System.IO;
using System.Xml;
using System.Xml.Resolvers;
    XmlDocument xDoc = new XmlDocument();
    try
    {
        //Добавленный код:
        XmlParserContext context = new XmlParserContext(null, new XmlNamespaceManager(new NameTable()), null, XmlSpace.None);
        context.DocTypeName = "html";
        context.PublicId = "-//W3C//DTD XHTML 1.0 Strict//EN";
        context.SystemId = "xhtml1-strict.dtd";

        //Это как было
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        settings.ValidationType = ValidationType.DTD;
        //обязательно добавить эту строчку
        settings.XmlResolver = new XmlPreloadedResolver(XmlKnownDtds.All);

        //добавить context в ридер
        XmlReader reader = XmlReader.Create(new StringReader(File.ReadAllText(book.BookPath)), settings, context);
        xDoc.Load(reader);
    }

взято с http://azurator.blogspot.com/2012/03/parsing-html-into-xelement.html . Если решение устаревшее(2012 год), прошу поделиться чем то более свежим)

→ Ссылка