Форум: "Основная";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
ВнизTreeView Найти похожие ветки
← →
Сатир (2002-04-22 16:47) [0]При создании дерева в данном примере корень создается дважды.
Подскажите, как пофиксить этот баг.
Вот код:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, XDOM_2_3, TypInfo;
type
TXMLTreeView = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
OpenDialog1: TOpenDialog;
procedure UpdateTreeView(RootNode:TDOMElement; const doc: TdomDocument);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
XMLTreeView: TXMLTreeView;
implementation
{$R *.dfm}
procedure TXMLTreeView.UpdateTreeView(RootNode:TDOMElement; const doc: TdomDocument);
procedure HandleNodeList(Parent:TTreeNode; DomNodeList:TDomNodeList);
var
i:integer;
DomNode:TDomNode;
tn:TTreeNode;
astr:string;
begin
for i:=0 to pred(DomNodeList.length) do
begin
DomNode:=DomNodeList.Item(i);
astr:=DomNode.NodeName;
// if DomNode.NodeValue <> "" then astr:=astr+" ["+DomNode.NodeValue+"]";
// astr:= astr + " ("+GetEnumName(TypeInfo(TdomNodeType), integer(DomNode.NodeType))+") ";
if domNode.nodeType = ntText_Node
then if TdomText(domNode).isWhitespaceInElementContent
then astr:= astr + "-- Whitespace in element content";
if domNode.nodeType=ntElement_Node then
tn:=parent.owner.AddChildObject(Parent,astr,domNode);
if assigned(DomNode.ChildNodes) then HandleNodeList(tn, DomNode.ChildNodes);
end;
end;
var
root:TTreeNode;
begin
treeview1.Items.BeginUpdate;
try
treeview1.Items.Clear;
Root:= treeview1.Items.AddObject(nil,RootNode.nodeName, RootNode);//concat(doc.NodeName," (",GetEnumName(TypeInfo(TdomNodeType), integer(Doc.NodeType)),") ",Doc.classname),doc);
--^ Это было раньше
HandleNodeList(Root,doc.ChildNodes);
finally
treeview1.Items.EndUpdate;
end;
end;
procedure TXMLTreeView.Button1Click(Sender: TObject);
var DomImpl : TDOMImplementation;
XMLParser : TXmlToDomParser;
Document : TDOMDocument;
Root:TDOMElement;
begin
With OpenDialog1 do
if Execute then begin
// Create DomImplementation and XMLParser
DomImpl := TDOMImplementation.Create( nil );
XMLParser := TXmlToDomParser.Create( nil );
// Assign XMLParser to existed DomImplementation
XMLParser.DOMImpl := DomImpl;
// Parse XML-file to DOM
XMLParser.fileToDom(filename);
//Документ
Document := TDOMDocument(DOMImpl.documents.item(0));
Root := Document.documentElement;
UpdateTreeView(Root, Document);
XMLParser.Free;
DomImpl.Free;
end;
end;
end.
Буду благодарен за любые идеи.
← →
Сатир (2002-04-22 18:31) [1]Всем спасибо, уже нашел
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.031 c