Я пытаюсь загрузить XML-документ в объект XPathDocument на С#. Мои XML-документы включают эту строку: trés dégagee + rade, и когда синтаксический анализатор прибывает туда, он выдает мне эту ошибку: «Произошла ошибка при анализе EntityName». Я знаю, что это нормальная причина символа «é». Кто-нибудь знает, как мне избежать этой ошибки... Моя идея состоит в том, чтобы вставить в XML-документ объявление сущностей и после заменить все специальные символы сущностями... но это долго, и я не уверен, что это работает. У вас есть другие идеи? Проще? Большое спасибо
Произошла ошибка при синтаксическом анализе EntityName
Ответы (2)
Собирался опубликовать это, но как раз серверы отключились. Думаю, я правильно переписал по памяти:
Я думаю, что проблема заключается в том, что по умолчанию XPathDocument
использует XmlTextReader
для анализа содержимого предоставленного файла, а этот XmlTextReader
использует настройку EntityHandling
ExpandEntities
.
Другими словами, когда вы полагаетесь на настройки по умолчанию, XmlTextReader
проверит входной XML и попытается разрешить все сущности. Лучше сделать это вручную, взяв полный контроль над XmlReaderSettings
(я всегда делаю это вручную):
string myXMLFile = "SomeFile.xml";
string fileContent = LoadXML(myXMLFile);
private string LoadXML(string xml)
{
XPathDocument xDoc;
XmlReaderSettings xrs = new XmlReaderSettings();
// The following line does the "magic".
xrs.CheckCharacters = false;
using (XmlReader xr = XmlReader.Create(xml, xrs))
{
xDoc = new XPathDocument(xr);
}
if (xDoc != null)
{
XPathNavigator xNav = xDoc.CreateNavigator();
return xNav.OuterXml;
}
else
// Unable to load file
return null;
}
Обычно это вызвано несоответствием между кодировкой, используемой для чтения файла, и фактическим кодированием файлов.
На первый взгляд, я бы сказал, что файл закодирован в UTF-8, но вы читаете его с кодировкой по умолчанию.
Попробуйте дополнить свой вопрос более подробной информацией, чтобы получить более точный ответ.