Произошла ошибка при синтаксическом анализе EntityName

Я пытаюсь загрузить XML-документ в объект XPathDocument на С#. Мои XML-документы включают эту строку: trés dégagee + rade, и когда синтаксический анализатор прибывает туда, он выдает мне эту ошибку: «Произошла ошибка при анализе EntityName». Я знаю, что это нормальная причина символа «é». Кто-нибудь знает, как мне избежать этой ошибки... Моя идея состоит в том, чтобы вставить в XML-документ объявление сущностей и после заменить все специальные символы сущностями... но это долго, и я не уверен, что это работает. У вас есть другие идеи? Проще? Большое спасибо


person user61652    schedule 31.03.2009    source источник
comment
Было бы полезно, если бы вы показали код, который вы используете для выполнения загрузки.   -  person AnthonyWJones    schedule 31.03.2009


Ответы (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;
}
person Cerebrus    schedule 31.03.2009

Обычно это вызвано несоответствием между кодировкой, используемой для чтения файла, и фактическим кодированием файлов.

На первый взгляд, я бы сказал, что файл закодирован в UTF-8, но вы читаете его с кодировкой по умолчанию.

Попробуйте дополнить свой вопрос более подробной информацией, чтобы получить более точный ответ.

person AnthonyWJones    schedule 31.03.2009