Home arrow Delphi-Kylix arrow Loading an XML Document into the DOM
DELPHI-KYLIX

Loading an XML Document into the DOM


In this article we will look at the code that we used to create a program that enabled us to load an XML document into DOM. This article is the fourth part of a four-part series that covers Delphi, XML, and the DOM.

Author Info:
By: David Web
Rating: 4 stars4 stars4 stars4 stars4 stars / 3
November 24, 2008
TABLE OF CONTENTS:
  1. · Loading an XML Document into the DOM
  2. · Code Explained
  3. · Adding Nodes
  4. · Checking the file

print this article
SEARCH DEVARTICLES

TOOLS YOU CAN USE

advertisement
Loading an XML Document into the DOM
(Page 1 of 4 )

The Code


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, ComCtrls;


type

TForm1 = class(TForm)

xd: TXMLDocument;

tv: TTreeView;

Button1: TButton;

Button4: TButton;

od: TOpenDialog;

tv1: TTreeView;

procedure Button4Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure tv1DblClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);


private

procedure DOMShow(Anode: IXMLNode; TNode: TTreeNode);

{ Private declarations }

public

fn:string;

{ Public declarations }

end;

const

IMG_NODE_ROOT = 0;

IMG_NODE_CLOSED = 1;

IMG_NODE_OPEN = 2;

IMG_NODE_ROOT2 = 3;

IMG_NODE_CLOSED2 = 4;

IMG_NODE_OPEN2 = 5;

var

Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Button4Click(Sender: TObject);

begin

close;

end;



procedure TForm1.DOMShow(Anode: IXMLNode; TNode: TTreeNode);

var

I: Integer;

NTNode: TTreeNode;

NText: string;

AttrNode: IXMLNode;

begin

// skip text nodes and other special cases

if not (Anode.NodeType = ntElement) then

Exit;

// add the node itself

NText := Anode.NodeName;

if Anode.IsTextElement then

NText := NText + ' = ' + Anode.NodeValue;

NTNode := tv.Items.AddChild(TNode, NText);

// add attributes

for I := 0 to Anode.AttributeNodes.Count - 1 do

begin

AttrNode := Anode.AttributeNodes.Nodes[I];

tv.Items.AddChild(NTNode,

'[' + AttrNode.NodeName + ' = "' + AttrNode.Text + '"]');

end;

// add each child node

if Anode.HasChildNodes then

for I := 0 to Anode.ChildNodes.Count - 1 do

DOMShow(Anode.ChildNodes.Nodes [I], NTNode);

end;


procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.Lines.Add(xd.DocumentElement.AttributeNodes.Nodes[0].NodeValue);


end;


procedure TForm1.Button3Click(Sender: TObject);

begin

ShowMessage(xd.DocumentElement.ChildNodes.Nodes[0].ChildValues['title']);

end;


procedure TForm1.FormCreate(Sender: TObject);

var

rec:TSearchRec;

begin

// Try to find regular files matching *.xml in the current dir

if FindFirst('MyXMLFiles*.xml', faAnyFile, rec) = 0 then

begin

with tv1.Items.AddFirst(nil, 'MyXMLFiles') do

begin

Selected:=true;

{Set the roots image index}

ImageIndex := IMG_NODE_ROOT;

{Set the roots selected index. The same image is uses

as for the ImageIndex}

SelectedIndex := IMG_NODE_ROOT;

end;


repeat

with tv1.Items.AddChildFirst( tv1.Selected, rec.Name) do

begin

{Set the image used when the node is not selected}

ImageIndex := IMG_NODE_CLOSED;

{Image used when the node is selected}

SelectedIndex := IMG_NODE_OPEN;

MakeVisible;

end;


until FindNext(rec) <> 0;


// Must free up resources used by these successful finds

FindClose(rec);

end

else begin

with tv1.Items.AddFirst( nil, 'No Files Found' ) do

begin

Selected := true;

end;

end;

end;


procedure TForm1.tv1DblClick(Sender: TObject);

var

path,xmlfile:string;

begin {

path:=extractfilepath(application.ExeName);

if (tv1.Selected.Level <> 0) then begin

fn:=tv1.Selected.Text;

//showmessage(path+fn);

xmlfile:=path+fn;

od.FileName:=xmlfile;

xd.LoadFromFile(od.FileName);

// tv.Items.Clear;

DOMShow(xd.DocumentElement, nil);

tv.FullExpand;

end; }

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

od.InitialDir := ExtractFilePath (Application.ExeName);

if od.Execute then

begin

xd.LoadFromFile(od.FileName);

tv.Items.Clear;

DOMShow (xd.DocumentElement, nil);

tv.FullExpand;

end;


end;


end.


blog comments powered by Disqus
DELPHI-KYLIX ARTICLES

- Loading an XML Document into the DOM
- Delphi Wrapper Classes and XML
- Delphi and the DOM
- Delphi and XML
- Internet Access: Client Service
- Finishing the Client for an Internet Access ...
- The Client for an Internet Access Control Ap...
- User Management for an Internet Access Contr...
- Important Procedures for an Internet Access ...
- Server Code for an Internet Access Control A...
- Constructing the Interface for an Internet A...
- Building a Server Application for an Interne...
- Building an Internet Access Control Applicat...
- Client Dataset: Working with Data Packets an...
- Using the Client Dataset in an N-Tiered Appl...

Dev Articles Forums 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Weekly Newsletter
 
Developer Updates  
Free Website Content 
Contact Us 
Site Map 
Privacy Policy 
Support 



© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 5 - Follow our Sitemap
Popular Web Development Topics
All Web Development Tutorials