C# · 12月 22, 2021

使用外部实体文件在C#中处理XML

我在C#中处理一个 XML文件(不包含任何dtd或ent声明),其中包含& eacute等实体;和& agrave;.尝试加载XML文件时收到以下异常… XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(record);

Reference to undeclared entity
‘eacute’.

我能够找到正确的文件here.如何在加载XML文件时告诉XmlDocument使用此文件?

解决方法 在.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&eacute;</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);}