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

时间:2011-04-14 00:47:57

标签: c# xml performance xhtml

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

        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;

我正在处理this文件,加载需要两分钟。为什么需要这么长时间?我尝试了从网上获取文件并加载本地文件。

2 个答案:

答案 0 :(得分:9)

我认为这是the DTD of the page需要很长时间才能加载。鉴于它定义了实体,你不应该disable it,所以你最好不要走这条路。

鉴于维基百科解析器的内部工作原理(一个正确的混乱),我认为这是一个很大的飞跃,假设它每次都会产生格式良好的XHTML。

使用HTML Agility Pack to parse(如果需要,您可以更轻松地转换为XmlDocument,IIRC)。

如果您真的想沿着XmlDocument路线走下去,可以保留HTML DTD的本地缓存。有关详细信息,请参阅this postthis postthis post

答案 1 :(得分:5)

因为XmlDocument不只是将你的Xml加载到一个很好的类heirarchy中,它还会获取文档中定义的所有命名空间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

这些都花了我大约20秒来取。