解析 EntityName 时出错

Posted

技术标签:

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

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

【问题讨论】:

如果您显示用于执行加载的代码会有所帮助。 【参考方案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 编码的,但您正在使用默认编码读取它。

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

【讨论】:

以上是关于解析 EntityName 时出错的主要内容,如果未能解决你的问题,请参考以下文章

XmlDocument.Load()加载xml文件时,提示分析 EntityName 时出错的问题。

MagicalRecord 在 ios 8.1 的第一次运行时崩溃

InterfaceError:错误绑定参数0 - 运行我的django脚本时可能不支持的类型

实体框架从 v1 到 v4 的转换问题

在 MikroORM 中创建迁移时,如何解决“请在 EntityName.id 中提供 'type' 或 'entity' 属性”错误?

+entityForName:在此模型中找不到名为“EntityName”的实体