Csharp/C#教程:XmlDocument和慢模式处理分享


XmlDocument和慢模式处理

我有一个xml模板文档,我需要加载到XmlDocument中。 例如

myXMLDocument.Load(myXMLFile); 

然而,这在dtd中加载时非常慢。 我已经尝试了"https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"和dtd的本地副本。 两者都或多或少地同时进行。 如果我通过将解析器设置为null(例如)来加载dtd,那么如果文档包含这些错误,则会出现诸如"Reference to undeclared entity 'nbsp'"错误"Reference to undeclared entity 'nbsp'"

我需要使用XmlDocument,因为我需要在输出文档之前操作DOM。 我怎样才能解决这些问题呢?

如果返回空的内存流,则可以避免DTD:

 private class DummyResolver : XmlResolver { public override System.Net.ICredentials Credentials { set { // Do nothing. } } public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn) { return new System.IO.MemoryStream(); } } 

ChrisW的回答听起来很有趣,但我从这个链接实现了一个缓存解析器: http : //msdn.microsoft.com/en-us/library/bb669135.aspx

这将速度从大约11.5秒增加到160毫秒,这可能已经足够了。 如果它仍然不够快,我将恭维ChrisW的解决方案。 ?

查看DTD文件,还有一些对.mod文件的在线引用,也许这些会减慢进程。 您也可以尝试对其中的一些进行评论,其中一些但不是全部都在评论中标记为“必需”。

它很慢,因为它是从网络下载的。 要解决此问题,请执行以下操作:

您是否尝试过创建一个虚拟解析器,它为任何dtd路径返回null并将其传递给load命令? 就像是:

上述就是C#学习教程:XmlDocument和慢模式处理分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 class DummyResolver : XmlUrlResolver { public override Uri ResolveUri (Uri baseUri, String relativeUri) { return null; } } XmlDocument xmlDocument = new XmlDocument(); xmlDocument.XmlResolver = new DummyResolver(); xmlDocument.Load(@"whatever.xml"); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1024817.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

精彩推荐