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

前端之家收集整理的这篇文章主要介绍了使用外部实体文件在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);
}

猜你在找的C#相关文章