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 шт):
Нашел все таки решение, с использованием того что я уже начинал, ошибка чтения необъявленных сущностей 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 год), прошу поделиться чем то более свежим)