我在C#中处理一个
XML文件(不包含任何dtd或ent声明),其中包含& eacute等实体;和& agrave;.尝试加载XML文件时收到以下异常…
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(record);
Reference to undeclared entity
‘eacute’.
解决方法
在.Net 4之前的框架版本中,您使用了
ProhibitDtd
的XmlReaderSettings实例.
var settings = new XmlReaderSettings(); settings.ProhibitDtd = false; string DTD = @"<!DOCTYPE doc [ <!ENTITY % iso-lat1 PUBLIC ""ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"" ""http://www.oasis-open.org/docbook/xmlcharent/0.3/iso-lat1.ent""> %iso-lat1; ]> "; string xml = string.Concat(DTD,"<xml><txt>rené</txt></xml>"); XmlDocument xd = new XmlDocument(); xd.Load(XmlReader.Create(new MemoryStream( UTF8Encoding.UTF8.GetBytes(xml)),settings));
从.Net 4.0开始,使用DtdProcessing
属性,其值为DtdProcessing.Parse,它是在XmlTextReader上设置的.
XmlDocument xd = new XmlDocument(); using (var rdr = new XmlTextReader(new StringReader(xml))) { rdr.DtdProcessing = DtdProcessing.Parse; xd.Load(rdr); }