我正在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&eacute;</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);
}

09-09 19:54
查看更多