程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 使用XMLDocment遍歷CSDN論壇帖子回復

使用XMLDocment遍歷CSDN論壇帖子回復

編輯:Delphi
 使用XMLDocment遍歷CSDN論壇帖子回復      一天在水園看到別人整理的水園語錄,就是把某人一個時間段在論壇參與的回復都整理在一塊,頓時感到心血來潮,自己何不也整一個,在必要的時候可以討好自己中意的MM,呵呵也可以多了解一些別人,何樂而不為啊  :)    仔細研究了一下論壇的文件格式都是XML的,Delphi6不是自帶有一個XmlDocument控件嗎?可以很方便的對XML文件進行讀取,研究了幾篇相關的文章,自己就動手開始做起來,花了二個多小時基本搞定,唯一的缺陷就是速度有點慢,遍歷2000個帖子大概需要5分鐘左右,那為兄弟有時間可以幫忙給完善一下,例如做成多線程什麼的,我實在是懶得改進了,呵呵,廢話少說,現貼出部分的代碼,主要完成對特定作者的回復進行搜索,其他通過設定關鍵字、論壇編號、時間段檢索大家可以自己完善。   主要代碼部分: 窗體上主要有4個文本框,一個memo控件和二個按扭 通過指定帖子起始編號、結束編號和作者名稱,點“search”按扭,就可以將結果顯示到memo框中。   unit XMLDocSearch;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, ComCtrls; const  url='http://expert.csdn.Net/Expert/topic/'; type   TFormTest = class(TForm)     MemoOutput: TMemo;     Button1: TButton;     Label1: TLabel;     Label2: TLabel;     Label3: TLabel;     Label4: TLabel;     Edit1: TEdit;     Edit2: TEdit;     Edit3: TEdit;     Edit4: TEdit;     Button2: TButton;     XMLDoc: TXMLDocument;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     private     { Private declarations }       StartID,EndID :LongInt;       KeyWord,Author :string;   public     { Public declarations }   end;   var   FormTest: TFormTest;   implementation   uses SearchThread;   {$R *.dfm}   procedure TFormTest.Button1Click(Sender: TObject);   顯示格式: {# # # 搜索范圍:489000--493000# # # 帖子ID:489353 回復者:傻傻貓 回復時間:2002-1-21 10:48:45 內容:   等一下吧。我發個短消息問她 # # # # # # # # # # # # # # # # # # # # # # # # } var   Root,CurNode,ChildNode :IXMLNode;   //根結點,當前節點,子節點   sStr, sStrReturn: String;   TopicID,ReplyName,ReplyNickName,ReplyTime,ReplyContent :string;   //主題編號,回復人名稱,回復人呢稱,回復時間,回復內容   CurUrl :PChar;   dtr,dts,dte : TDateTime;    min : double;     CurID :integer;  //當前編號 begin   dts :=now;   //開始時間   StartID :=strtoint(edit3.Text);   EndID :=strtoint(edit4.Text);   KeyWord :=trim(edit1.Text);   Author :=trim(edit2.Text);   MemoOutput.Clear;   sStrReturn := Chr(13) + Chr(10);   sStr :='# # # 搜索范圍:'+inttostr(StartID)+'--'+inttostr(EndID)+'# # #'+sStrReturn+sStrReturn;   MemoOutput.SetSelTextBuf(PChar(sStr));     for CurID:=StartID to EndID do   begin     TopicID :=inttostr(CurID);     CurUrl :=PChar(Url+copy(TopicID,1,length(TopicID)-3)+'/'+TopicID+'.XML');     XMLdoc.LoadFromFile(CurUrl);     XMLdoc.Active :=true;     Root :=xmldoc.DocumentElement;  //取XML文件的根結點,即Topic CurNode :=Root.ChildNodes['Replys'];   //使當前節點指向第二個子節點Replys     CurNode :=CurNode.ChildNodes.First; //使當前節點指向Replys節點的第一個子節點信息       while (CurNode<>nil) do    //循環讀取多個Reply信息       begin         if CurNode.ChildNodes['PostUserName'].Text =Author then         begin           ChildNode :=CurNode.ChildNodes.First ; //使ChildNode指向該Reply的第一個子節點信息           while (ChildNode<>nil) do   //循環讀取Reply的各個子節點           begin             if (ChildNode.NodeName ='PostUserName') then               ReplyName :=ChildNode.Text             else if (ChildNode.NodeName ='PostUserNickName') then               ReplyNickName :=ChildNode.Text             else if (ChildNode.NodeName ='PostDateTime') then               ReplyTime :=ChildNode.Text              else if (ChildNode.NodeName ='Content') then               ReplyContent :=trim(ChildNode.Text);             ChildNode:=ChildNode.NextSibling ; //順序取下一個Reply的子節點信息           end;           sStr :='帖子ID:'+TopicID+sStrReturn;           sStr :=sStr+'回復者:'+ReplyName+'('+ReplyNickName+')'+sStrReturn;           sStr :=sStr+'回復時間:'+ReplyTime+sStrReturn;           sStr :=sStr+'內容:'+sStrReturn+sStrReturn+ReplyContent+sStrReturn+sStrReturn;           sStr :=sStr+'# # # # # # # # # # # # # # # # # # # # # # # #';           sStr :=sStr+sStrReturn;           MemoOutput.SetSelTextBuf(PChar(sStr));         end;         CurNode :=CurNode.NextSibling;  //順序取下一個Reply信息       end;     //  xmldoc.SaveToFile('.down'+TopicID+'.XML');   //保存文件   end;   dte :=now;   //結束時間   dtr :=dte-dts;   min :=dtr*24*60*60;   showmessage('總共使用了'+floattostr(min)+'秒!'); end;   procedure TFormTest.Button2Click(Sender: TObject); begin  close; end;  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved