加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:30:43 所属栏目:百科 来源:网络整理
导读:我在C#中处理一个 XML文件(不包含任何dtd或ent声明),其中包含 eacute等实体;和 agrave;.尝试加载XML文件时收到以下异常… XmlDocument xmlDoc = new XmlDocument();xmlDoc.LoadXml(record); Reference to undeclared entity ‘eacute’. 我能够找到正确的文
我在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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读