【问题标题】:An error occurred while parsing EntityName解析 EntityName 时出错
【发布时间】:2010-10-16 14:05:06
【问题描述】:

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

【问题讨论】:

  • 如果您显示用于执行加载的代码会有所帮助。

标签: c# xml parsing


【解决方案1】:

正要发布这个,然后服务器就宕机了。我想我已经根据记忆正确地重写了它:

我认为问题在于默认情况下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;
}

【讨论】:

    【解决方案2】:

    这通常是由于用于读取文件的编码与实际编码的文件不匹配造成的。

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

    尝试用更多细节来加强你的问题以获得更明确的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多