解析EntityName时发生错误

时间:2009-03-31 09:04:59

标签: c# xml parsing

我正在尝试将xml文档加载到C#中的对象XPathDocument中。 我的xml文档包含以下行: trésdégagée+ rade 当解析器到达那里时,它给了我这个错误: “解析EntityName时发生错误” 我知道这是角色“é”的正常原因。有谁知道我怎么能避免这个错误...我的想法是在xml文档中插入一个实体声明,并在用实体替换所有特殊字符后......但它很长,我不确定它是否正常工作。你有其他想法吗?更简单? 非常感谢

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:4)

通常这是由用于读取文件的编码与实际编码的文件之间的不匹配引起的。

猜测我会说该文件是UTF-8编码的,但是您正在使用默认编码进行读取。

尝试使用更多详细信息来加强您的问题,以获得更明确的答案。