File: testxmlreaderunit.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (134 lines) | stat: -rw-r--r-- 2,755 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
unit TestXMLReaderUnit; 

{$mode objfpc}{$H+}

interface

uses
  SysUtils, LazFileUtils, LazUTF8, Forms, EditBtn, StdCtrls, Buttons,
  ComCtrls, ExtCtrls, DOM, XMLRead;

type

  { TXMLReaderForm }

  TXMLReaderForm = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    FileNameEdit1: TFileNameEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ListView1: TListView;
    Panel1: TPanel;
    Panel2: TPanel;
    Splitter1: TSplitter;
    TreeView1: TTreeView;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
  private
    FDoc: TXMLDocument;
    procedure ParseDoc;
  public

  end; 

var
  XMLReaderForm: TXMLReaderForm;

implementation


{ TXMLReaderForm }

procedure TXMLReaderForm.BitBtn1Click(Sender: TObject);
begin
  if Assigned(FDoc) then
    FreeAndNil(FDoc);

  if FileExistsUTF8(FileNameEdit1.FileName) then
    ReadXMLFile(FDoc, UTF8ToSys(FileNameEdit1.FileName));
  if Assigned(FDoc) then
    ParseDoc;
end;

procedure TXMLReaderForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  if Assigned(FDoc) then
    FDoc.Free;
end;

procedure TXMLReaderForm.FormCreate(Sender: TObject);
begin
  if ParamCount > 0 then
  begin
    FileNameEdit1.FileName:=ParamStrUTF8(1);
    BitBtn1Click(nil);
  end;

  TreeView1Click(nil);
end;

procedure TXMLReaderForm.TreeView1Click(Sender: TObject);
var
  Node:TDOMNode;
  Item:TListItem;
  i:Integer;
begin
  Edit1.Text:='';
  Edit2.Text:='';

  if not Assigned(TreeView1.Selected) then exit;
  Node:=TDOMNode(TreeView1.Selected.Data);
  if not Assigned(Node) then exit;

  Edit1.Text:=Node.NodeName;
  Edit2.Text:=Node.NodeValue;

  ListView1.BeginUpdate;
  ListView1.Items.Clear;

  if Assigned(Node.Attributes) then
    for i:=0 to Node.Attributes.Length-1 do
    begin
      Item:=ListView1.Items.Add;
      Item.Caption:=Node.Attributes[i].NodeName;
      Item.SubItems.Add(Node.Attributes[i].NodeValue);
    end;
  ListView1.EndUpdate;
end;

procedure TXMLReaderForm.ParseDoc;

procedure DoFill(AOwner:TTreeNode; Node:TDOMNode);
var
  i: integer;
  AItem:TTreeNode;
begin
  if not Assigned(Node) then exit;
  for i:=0 to Node.ChildNodes.Count - 1 do
  begin
    AItem:=TreeView1.Items.AddChild(AOwner, Node.ChildNodes[i].NodeName);
    AItem.Data:=Node.ChildNodes[i];
    if not Assigned(TreeView1.Selected) then
      TreeView1.Selected:=AItem;
    DoFill(AItem, Node.ChildNodes[i]);
  end;
end;

begin
  TreeView1.Selected:=nil;
  TreeView1.Items.BeginUpdate;
  TreeView1.Items.Clear;
  DoFill(nil, FDoc);
  TreeView1.Items.EndUpdate;
  TreeView1Click(nil);
end;

{$R *.lfm}

end.