我有一些非常简单的代码:
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文件,加载需要两分钟。为什么需要这么长时间?我尝试了从网上获取文件并加载本地文件。
答案 0 :(得分:9)
我认为这是the DTD of the page需要很长时间才能加载。鉴于它定义了实体,你不应该disable it,所以你最好不要走这条路。
鉴于维基百科解析器的内部工作原理(一个正确的混乱),我认为这是一个很大的飞跃,假设它每次都会产生格式良好的XHTML。
使用HTML Agility Pack to parse(如果需要,您可以更轻松地转换为XmlDocument
,IIRC)。
如果您真的想沿着XmlDocument
路线走下去,可以保留HTML DTD的本地缓存。有关详细信息,请参阅this post,this post和this 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秒来取。