var
XMLDoc: IXMLDOMDocument;
…
XMLDoc:=CoDOMDocument.Create;
A dokumentum betöltése a Button1 OnClick eseményénél történik meg, amihez a Load eljárást használjuk. A TreeView1 BeginUpdate metódusát meghívva letiltjuk annak frissítését. Ennek hasznát elsősorban hosszabb dokumentumoknál fogjuk érezni, mivel a megjelenítés sebessége jelentősen megnő. A BuildDOMTree eljárással beolvassuk a dokumentum elemeit a TreeView1-be. a TreeView1 első elemét "kibontjuk" az Expand eljárással. Ezzel tulajdonképpen a teljes szerkezetet megjelenítjük, mivel az első elem tartalmazza az összes többit is. Az EndUpdate eljárással engedélyezzük a TreeView1 frissítését.
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
XMLDoc.Load(OpenDialog1.FileName);
TreeView1.Items.BeginUpdate; TreeView1.Items.Clear;
BuildDOMTree(XMLDoc, nil);
TreeView1.Items[0].Expand(true);
TreeView1.TopItem:=TreeView1.Items[0]; TreeView1.Items.EndUpdate;
end;
end;
Fentebb már tisztáztuk, hogy az elemek beolvasását a TreeView1-be a BuildDOMTree eljárás végzi. Egy hierarchikus szerkezetet a leghatékonyabban rekurzív eljárással tudunk bejárni, ezért most is ezt tesszük. Az eljárás első paramétere a beolvasandó csomópont, ami kezdetben maga a dokumentum (XMLDoc), vagyis a gyökér elem. A ParentNode paraméter a TreeView1 azon eleme, aminek a gyermek elemei lesznek a most beolvasandó elemek.
procedure TForm1.BuildDOMTree(DOMNode: IXMLDOMNode; ParentNode: TTreeNode);
var
i: integer;
TreeNode: TTreeNode;
begin
if (DOMNode.NodeType = NODE_ELEMENT)
or (DOMNode.NodeType = NODE_DOCUMENT) then
begin
TreeNode:=TreeView1.Items.AddChild(ParentNode, copy(DOMNode.text,1,40)+' <'+DOMNode.NodeName+'>');
for i:=0 to DOMNode.ChildNodes.Length-1 do
BuildDOMTree(DOMNode.ChildNodes[i], TreeNode);
end;
end;