procedure BuildTreeByXml(var aTree: TTreeView; aFileName: String); {} procedure AddChildren(aParentTreeNode: TTreeNode; aXmlNode: TXmlNode; var iLevel: Integer); var iNode: Integer; TreeNode: TTreeNode; begin Inc(iLevel); for iNode := 0 to aXmlNode.NodeCount-1 do begin TreeNode := aTree.Items.AddChild(aParentTreeNode, Format('Level %d, Position %d.', [iLevel, iNode])); if aXmlNode.Nodes[iNode].NodeCount > 0 then AddChildren(TreeNode, aXmlNode.Nodes[iNode], iLevel); end; Dec(iLevel); end; {} var XMLDoc: TNativeXml; XmlNode: TXmlNode; FN: String; TreeNode: TTreeNode; iLevel: Integer; begin if FileExists(aFileName) then begin if Assigned(aTree) then aTree.Items.Clear else aTree := TTreeView.Create(nil); XMLDoc := TNativeXml.Create(Nil); XMLDoc.LoadFromFile(aFileName); if Assigned(XMLDoc.Root) then begin XmlNode := XMLDoc.Root; TreeNode := nil; iLevel := 0; if Assigned(XmlNode) then begin TreeNode := aTree.Items.Add(TreeNode, Format('Level %d, Position %d.', [iLevel, 0])); AddChildren(TreeNode, XmlNode, iLevel); end; end; XMLDoc.Free; end; end; |