我正试图将XML文档加载到C中的对象xpathdocument中。
我的XML文档包括以下行:
特蕾斯德盖格+拉德
当解析器到达时,它会给我一个错误:
“分析EntityName时出错”
我知道这是“é”这个角色的正常原因。有人知道我怎样才能避免这个错误…我的想法是在XML文档中插入一个实体声明,然后用实体替换所有特殊字符……但是它很长,我不确定它是否有效。你还有别的想法吗?更简单?
谢谢

最佳答案

就在这篇文章要发表的时候,服务器就坏了。我想我已经从记忆中正确地重写了它:
我认为问题在于默认情况下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;
}

09-07 20:29