国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 18:35:27
字體:
來源:轉載
供稿:網友
  使用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;
 
end.

上一篇:通過原代碼學習TComponent類的機制(1)

下一篇:使用ClientSocket控件實現CSDN論壇帖子的自動回復

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 宁远县| 滨海县| 盐城市| 长泰县| 西平县| 海城市| 鄂托克前旗| 大洼县| 贵州省| 洪江市| 仁寿县| 卓尼县| 讷河市| 兴化市| 抚顺县| 九台市| 景宁| 张家口市| 芮城县| 辽阳市| 尼木县| 石渠县| 安徽省| 高陵县| 惠东县| 霍林郭勒市| 治多县| 杭州市| 乐东| 兴海县| 延庆县| 婺源县| 应城市| 白朗县| 塘沽区| 都兰县| 五河县| 玉溪市| 通河县| 伽师县| 徐州市|