我正在尝试将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;
}
Run Code Online (Sandbox Code Playgroud)