求一个最快的读取XML算法,现在读取一个有五万个Node的XML要差不多五分钟!

kingbenz 2005-03-30 11:35:20
现在的代码:
uses
XMLIntf, XMLDoc

XMLDocument :IXMLDocument;
XMLNode, XMLNode2:IXMLNode; XMLDocument := XMLDoc.TXMLDocument.Create( 'E:\test.xml' );
XMLDocument.Active := True;
XMLNode := XMLDocument.DocumentElement;
for i:=0 to XMLNode.ChildNodes.Count-1 do
begin
XMLNode2:=XMLNode.ChildNodes.Get(i);
for j := 0 to XMLNode2.AttributeNodes.Count-1 do
begin
....
end;
end;

XMLDocument.Active:=False;
XMLNode2:=Nil;
XMLNode:=Nil;
XMLDocument:=Nil;
...全文
243 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dejoy 2005-04-07
  • 打赏
  • 举报
回复
Fast script中就有一个xml解析器
dejoy 2005-04-07
  • 打赏
  • 举报
回复
不要用MSXML,使用原生的pascal 解析器
progray 2005-04-05
  • 打赏
  • 举报
回复
MARK,THX
halfdream 2005-03-31
  • 打赏
  • 举报
回复
你在GOOGLE上搜关键词DELPHI SAX ,会有一堆资料的。。比如:
http://home.iprimus.com.au/kbwood/DelphiXML/BookCode/Chapter%2014/
kingbenz 2005-03-31
  • 打赏
  • 举报
回复
感谢halfdream提示,但我对SAX不了解,有没有什么例子参考一下?
数字蛋糕 2005-03-31
  • 打赏
  • 举报
回复
你可以先看看http://community.csdn.net/Expert/topic/3898/3898397.xml?temp=.7485315中的MSXML的使用方法。

同时MSXML中就集成了SAX。你需要自己写一个ISaxContentHandler(其实是一个Callback的集合),然后代入引擎中就可以了。

SAX本身并不能提高解析的速度,但是通过SAX的机制,你却能够通过舍弃对部分元素的处理来提高对有用信息的解析命中率,从而提高执行的效率。

不过我个人觉得MSXML的DOM解析速度也相当的高,也许你不一定需要SAX,那毕竟麻烦的多。
yeliming 2005-03-31
  • 打赏
  • 举报
回复
你需要修改XML文件么?如果只是需要读取出来,那用SAX就没错了。
除了楼上介绍的SAX for Pascal外,MSXML4.0也能做SAX解析。
halfdream 2005-03-30
  • 打赏
  • 举报
回复
用DOM解析当然比较慢。

要快可以用SAX或者直接写代码解析XML字符串。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧