Произошла ошибка при разборе EntityName - PullRequest
3 голосов
/ 31 марта 2009

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

Ответы [ 2 ]

6 голосов
/ 31 марта 2009

Собирался опубликовать это, и только тогда серверы вышли из строя. Я думаю, что я переписал это правильно из памяти:

Я думаю, что проблема заключается в том, что по умолчанию 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;
}
4 голосов
/ 31 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...