我正试图将XML文档加载到C中的对象xpathdocument中。
我的XML文档包括以下行:
特蕾斯德盖格+拉德
当解析器到达时,它会给我一个错误:
“分析EntityName时出错”
我知道这是“é”这个角色的正常原因。有人知道我怎样才能避免这个错误…我的想法是在XML文档中插入一个实体声明,然后用实体替换所有特殊字符……但是它很长,我不确定它是否有效。你还有别的想法吗?更简单?
谢谢
最佳答案
就在这篇文章要发表的时候,服务器就坏了。我想我已经从记忆中正确地重写了它:
我认为问题在于默认情况下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;
}