2009-03-31 3 views
3

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

+1

Это поможет, если вы показать код, который используется для выполнения нагрузки. – AnthonyWJones

ответ

6

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

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

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

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

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

Смежные вопросы