为什么这个XML文件加载缓慢?

本文关键字:加载 缓慢 文件 XML 为什么 | 更新日期: 2023-09-27 17:50:14

我有一些非常简单的代码:

        XmlDocument doc = new XmlDocument();
        Console.WriteLine("loading");
        doc.Load(url);
        Console.WriteLine("loaded");
        XmlNodeList nodeList = doc.GetElementsByTagName("p");
        foreach(XmlNode node in nodeList)
        {
            Console.WriteLine(node.ChildNodes[0].Value);
        }
        return source;

我正在处理这个文件,加载需要两分钟。为什么要花这么长时间?

为什么这个XML文件加载缓慢?

我试着从网上获取和加载一个本地文件。

我认为是页面的DTD花了这么长时间加载。考虑到它定义了实体,你不应该禁用它,所以你最好不要走这条路。

考虑到wikipedia解析器的内部工作原理(一团糟),我想说,假设它每次都能生成格式良好的XHTML是一个很大的飞跃。

使用HTML Agility Pack进行解析(如果需要的话,您可以更容易地转换为XmlDocument, IIRC)。

如果您真的想走XmlDocument路线,您可以保留HTML dtd的本地缓存。详情请参阅这篇文章、这篇文章和这篇文章。

这是因为XmlDocument不仅将Xml加载到一个漂亮的类层次结构中,而且还获取文档中定义的所有名称空间DTD。运行fiddler,您将看到获取

的调用
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent
http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent