我正在C#中处理一个XML文件(该文件不包含é
和à
等实体)(该文件不包含任何 dtd 或和声明)。尝试加载XML文件时收到以下异常...
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(record);
我能够找到正确的和文件here。加载XML文件时,如何告诉
XmlDocument
使用此和文件? 最佳答案
在.Net 4之前的框架版本中,您使用XmlReaderSettings实例的 ProhibitDtd
。
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开始,请使用在XmlTextReader上设置的
DtdProcessing
值的 DtdProcessing.Parse
属性。XmlDocument xd = new XmlDocument();
using (var rdr = new XmlTextReader(new StringReader(xml)))
{
rdr.DtdProcessing = DtdProcessing.Parse;
xd.Load(rdr);
}