在C#中以编程方式检查XML文件格式良好的最快方法是什么?

在C#中以编程方式检查XML文件格式良好的最快方法是什么?,第1张

概述我有大批手动更新的X HTML文件.在更新的审查阶段,我想以编程方式检查文件的格式. 我目前正在使用XmlReader,但平均CPU所需的时间比我预期的要长得多. XHTML文件的大小范围为4KB到40KB,每个文件的验证需要几秒钟.检查是必不可少的,但我希望尽可能缩短时间,因为在将文件读入下一个流程步骤时执行检查. 有没有更快的方法来进行简单的XML格式检查?也许使用外部XML库? 我可以确认使 我有大批手动更新的X HTML文件.在更新的审查阶段,我想以编程方式检查文件的格式.
我目前正在使用XmlReader,但平均cpu所需的时间比我预期的要长得多.

xhtml文件的大小范围为4KB到40KB,每个文件的验证需要几秒钟.检查是必不可少的,但我希望尽可能缩短时间,因为在将文件读入下一个流程步骤时执行检查.

有没有更快的方法来进行简单的XML格式检查?也许使用外部XML库?

我可以确认使用XmlReader验证“常规”基于XML的内容是快速的,并且正如所建议的那样,问题似乎与每次验证文件时读取xhtml DTD的事实有关.

<!DOCTYPE HTML PUBliC "-//W3C//DTD xhtml 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">

请注意,除了DTD之外,还会下载相应的.ent文件(xhtml-lat1.ent,xhtml-symbol.ent,xhtml-special.ent).

由于完全忽略DTD并不是xhtml的真正选择,因为良好的格式与允许的HTML实体密切相关(例如,当我们忽略DTD时,它会立即引入验证错误).

通过使用建议的自定义XmlResolver,结合DTD和实体文件的本地(嵌入)副本,解决了该问题.

一旦我清理了代码,我就会在这里发布解决方案

解决方法 我希望带有while(reader.Read)(){}的XmlReader是最快的托管方法.读取40KB肯定不需要几秒钟……您使用的输入方法是什么?

你可能有一些外部(架构等)实体要解决?如果是这样,您可以编写一个使用本地缓存模式而不是远程获取的自定义XmlResolver(通过XmlReaderSettings设置)…

以下几乎立即执行~300KB:

using(MemoryStream ms = new MemoryStream()) {        XmlWriterSettings settings = new XmlWriterSettings();        settings.CloSEOutput = false;        using (XmlWriter writer = XmlWriter.Create(ms,settings))        {            writer.WriteStartElement("xml");            for (int i = 0; i < 15000; i++)            {                writer.WriteElementString("value",i.ToString());            }            writer.WriteEndElement();        }        Console.Writeline(ms.Length + " bytes");        ms.position = 0;        int nodes = 0;        Stopwatch watch = Stopwatch.StartNew();        using (XmlReader reader = XmlReader.Create(ms))        {            while (reader.Read()) { nodes++; }        }        watch.Stop();        Console.Writeline("{0} nodes in {1}ms",nodes,watch.ElapsedMilliseconds);    }
总结

以上是内存溢出为你收集整理的在C#中以编程方式检查XML文件格式良好的最快方法是什么?全部内容,希望文章能够帮你解决在C#中以编程方式检查XML文件格式良好的最快方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存