XML文件數據的讀寫查詢[NativeXML控件實現]

 利用第三方-NativeXML控件來實現XML文件的讀、查功能 完整代碼如下:

----------------------------(很多測試代碼未刪除 均已//註釋)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    GroupBox1: TGroupBox;
    Edit4: TEdit;
    Label5: TLabel;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    GroupBox3: TGroupBox;
    BitBtn1: TBitBtn;
    Bevel1: TBevel;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn2: TBitBtn;
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure N1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

 

implementation

{$R *.dfm}
uses NativeXML;

 

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

 

// [清空]模塊
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Memo1.Lines.Clear ;
  Label4.Caption :='' ;
  edit4.Text :='' ;
end;

 

procedure TForm1.Button3Click(Sender: TObject);
begin

end;

 

//edit回車功能

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  BitBtn4Click(nil);
end;

 

procedure TForm1.N1Click(Sender: TObject);
begin
  BitBtn3Click(nil) ;
end;

 

procedure TForm1.N4Click(Sender: TObject);
begin
  BitBtn1Click(nil) ;
end;

 

procedure TForm1.N2Click(Sender: TObject);
begin
  BitBtn4Click(nil);
end;

 

// [查找]功能部分

procedure TForm1.BitBtn4Click(Sender: TObject);
var
  ADoc: TNativeXml;
  i,j,m,n:integer;
  nd1,nd2 :TXMLNode;
begin
  Memo1.Lines.Clear;
  ADoc := TNativeXml.Create;
  try
    ADoc.LoadFromFile('E:/Signal.xml');
    ADoc.XmlFormat := xfReadable;
    m:=Adoc.Root.NodeCount ;
    n:=0;
    for m:=0 to m-1 do
      begin
      j:=Adoc.Root.Nodes[m].NodeCount ;
      nd1 :=Adoc.Root.Nodes[m] ;
      for i:=0 to j-1 do
        begin
          nd2 :=nd1.Nodes[i] ;
          if nd1.Name =trim(edit4.Text ) then
          with Memo1.Lines do
          begin
            Add('ID= '+nd1.AttributeByName['Id']);
            Add('Name= '+nd1.AttributeByName['Name']);
            Add('ID= '+nd2.AttributeByName['id']);
            Add('Name= '+nd2.AttributeByName['name']);
            Add('Signal= '+nd2.AttributeByName['signal']);
            Add('-----------------------------------------');
            n :=n+1 ;
          end
          else if nd2.Name =trim(edit4.Text ) then
          with Memo1.Lines do
          begin
            Add('ID= '+nd2.AttributeByName['id']);
            Add('Name= '+nd2.AttributeByName['name']);
            Add('Signal= '+nd2.AttributeByName['signal']);
            Add('----------------------------------------');
            n :=n+1 ;
          end;
        end;
    end;
    Label4.Caption :='數據記錄總計:  '+inttostr(n)+' 條                  ';
    ShowMessage('查找完成!');
  finally
    Adoc.Free ;
  end;
end;

 

// [ 讀取]功能模塊

procedure TForm1.BitBtn3Click(Sender: TObject);
var
  ADoc: TNativeXml;
  i,j,m,n:integer;
  nd1, nd2: txmlNode;
begin
  Memo1.Lines.Clear;
  ADoc := TNativeXml.Create;
  try
    ADoc.LoadFromFile('E:/Signal.xml');
    ADoc.XmlFormat := xfReadable;
    //j:=Adoc.Root.FindNode('item').NodeCount ;
    n:=0 ;
    m:=Adoc.Root.NodeCount ;
    //showmessage(inttostr(j));
    for m:=0 to m-1 do
      begin
      j:=Adoc.Root.Nodes[m].NodeCount ;
      nd1 := adoc.Root.Nodes[m]; //item
      for i:=0 to j-1 do
        begin
          nd2 := nd1.Nodes[i]; //define
          Memo1.Lines.Add('ID= '+nd2.AttributeByName['id']);
          Memo1.Lines.Add('Name= '+nd2.AttributeByName['name']);
          Memo1.Lines.Add('Signal= '+nd2.AttributeByName['signal']);
          Memo1.Lines.Add('-----------------');
          n:=n+1;
        end;
      end;
      Label4.Caption :='數據記錄總計: '+inttostr(n)+' 條      ' ;
      showmessage('數據讀取完成!');
  finally
    ADoc.Free;
  end;
end;

 

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Form1.Free ;
end;

end.

----------------------------

相關XML文件格式:

<SignalDefine>
  <Item Id="1" Name="大車連續障礙" >
    <Define   id="1" name="LXZI_L_01" Signal="$00000001"  />
     ...
    <Define   id="21" name="輔助信號" Signal="$0080000000"  />   
  </Item>
  <Item Id="2" Name="大車限寬門" >
    <Define   id="1" name="XKM_L_01"  Signal="$00000001"  />
    ...
    <Define   id="11" name="XKM_P_06" Signal="$00200000"  />
  </Item>
  <Item Id="3" Name="大車坡道起步" >
    <Define   id="1" name="PDQB_L_01" Signal="$00000010"  />
     ...
    <define   id="169" name="ER_B_83" Signal="$CB000000" reverse="0"  />
    <define   id="170" name="ER_B_84" Signal="$CC000000" reverse="0"  />
  </Item>
  <Item Id="4" Name="大車單邊橋" >
    <Define   id="1" name="DBQ_L_01" Signal="$00000001"  />
    ...
    <Define   id="10" name="DBQ_L_10" Signal="$00000200"  />
  </Item>
  <Item Id="5" Name="大車直角轉彎">
    <Define   id="1" name="ZJZW_L_01" Signal="$00000400"  />
    ...  

    <Define   id="5" name="ZJZW_P" Signal="$00004000"  />
  </Item>
  <Item Id="6" Name="大車曲線行駛">
    <Define   id="1" name="QXXS_L_01" Signal="$00010000"  />
     ...
    <Define   id="4" name="QXXS_L_04" Signal="$00080000"  />
  </Item>
</SignalDefine>

------------------------------

2009-11-04

 

發佈了17 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章