我正在尝试将xml文档加载到C#中的对象XPathDocument中.我的xml文档包括以下行:trésdégagée+ rade,当解析器到达那里时,它给了我这个错误:"解析EntityName时出错"我知道这是字符"é"的正常原因.有谁知道我怎么能避免这个错误...我的想法是在xml文档中插入一个实体声明,并在用实体替换所有特殊字符后......但它很长,我不确定它是否正常工作.你有其他想法吗?更简单?非常感谢
即将发布这个,然后服务器就崩溃了.我想我已经从记忆中正确地重写了它:
我认为问题在于,默认情况下,XPathDocument
使用an 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; }