unit untMain;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, MSXML_TLB, StdCtrls, ExtCtrls;type TForm1 = class(TForm) tvXML: TTreeView; Splitter1: TSplitter; rchXML: TRichEdit; procedure FormCreate(Sender: TObject); procedure tvXMLClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; MyDom:DOMDocument; implementation Function AddXMLElements(dom:IXMLDOMNode; parentnode : TTreeNode; pTV : TTreeView):boolean; var i:integer; node:TTreeNode; begin If dom.hasChildNodes Then begin For i:= 0 To dom.childNodes.length - 1 do begin If dom.childNodes.Item[i].baseName <> '' Then begin node := pTV.Items.AddChild(parentnode, '[N] <' + dom.childNodes.Item[i].baseName + '>' ); node.Data := pointer(i); AddXMLElements(dom.childNodes.Item[i], node, pTV); end; end; End; try For i := 0 To dom.Attributes.length - 1 do begin node := pTV.Items.AddChild(parentnode, '[A]' + dom.Attributes.item[i].baseName + '=' + dom.Attributes.item[i].Text); node.Data := pointer(-1); end; finally end; End;function LoadXMLTOTreeView(szXMLfile:string;pTV:TTreeView):boolean; var root,node:TTreeNode; i:integer; begin MyDom := CoDOMDocument.Create; If (Not MyDom.Load(szXMLFile)) Then begin LoadXMLToTreeView := False; exit; end; root := pTV.Items.AddFirst(nil,MyDom.nodeName); For i := 0 To MyDom.childNodes.length - 1 do begin node := pTV.Items.AddChild(root, MyDom.childNodes.Item[i].baseName); node.Data := Pointer(i); AddXMLElements(MyDom.childNodes.Item[i], node, pTV); end;end;function GetElemvalue(node:ttreenode):string; var lst:array [1..10000] of integer; ct:integer; nd:ttreenode; dom:IXMLDOMNode; begin nd:=node; ct:=0; repeat inc(ct); lst[ct]:=integer(nd.data); if(lst[ct]=-1)then begin getelemvalue:=''; exit; end; nd:=nd.Parent; until nd=nil; dec(ct); dom:=mydom; while ct>0 do begin dom:=dom.childNodes.item[lst[ct]]; dec(ct); end; getelemvalue:=dom.xml; end; {$R *.DFM}procedure TForm1.FormCreate(Sender: TObject); var n:ttreenode; begin LoadXMLTOTreeView('C:\Program Files\Common Files\Microsoft Shared\Help\dexplore.xml', tvXML); end;procedure TForm1.tvXMLClick(Sender: TObject); begin if (tvxml.selected <> nil) then begin rchXML.Text:=GetElemvalue(tvxml.selected); end; end;end.不支持编辑功能
问题是我还要根据图形配置生成xml文件!
我就用它的
-----------------------------------
步骤:
1、View\Component List\输入TClientDataSet\点Add to form按钮
设置属性:FileName = 'E:\Borland\Borland Shared\Data\customer.xml'
2、设置属性Active:=true
接着和Table、Query的操作一样啊,用DBGrid就可以显示数据呀!组件属性设置如下:
object ClientDataSet1: TClientDataSet
Active = True
Aggregates = <>
FileName = 'E:\Borland\Borland Shared\Data\customer.xml'
Params = <>
Left = 128
Top = 80
Data = {
}
end
然后通过类来访问这个xml文件
2:XMl mapper将XMl解析成一个xtr描述文件
然后用XMltransprivide将数据读出放到一个Clientdataset数据寄种
3:将xml装载在xmldocument组件中以一种树节点的形式读出数据啊delphi对xml的三种用法
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, MSXML_TLB, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
tvXML: TTreeView;
Splitter1: TSplitter;
rchXML: TRichEdit;
procedure FormCreate(Sender: TObject);
procedure tvXMLClick(Sender: TObject);
private
{ Private declarations } public
{ Public declarations }
end;var
Form1: TForm1;
MyDom:DOMDocument;
implementation
Function AddXMLElements(dom:IXMLDOMNode; parentnode : TTreeNode; pTV : TTreeView):boolean;
var
i:integer;
node:TTreeNode;
begin
If dom.hasChildNodes Then
begin
For i:= 0 To dom.childNodes.length - 1 do
begin
If dom.childNodes.Item[i].baseName <> '' Then
begin
node := pTV.Items.AddChild(parentnode, '[N] <' + dom.childNodes.Item[i].baseName + '>' );
node.Data := pointer(i);
AddXMLElements(dom.childNodes.Item[i], node, pTV);
end;
end;
End;
try
For i := 0 To dom.Attributes.length - 1 do
begin
node := pTV.Items.AddChild(parentnode, '[A]' + dom.Attributes.item[i].baseName + '=' + dom.Attributes.item[i].Text);
node.Data := pointer(-1);
end;
finally end;
End;function LoadXMLTOTreeView(szXMLfile:string;pTV:TTreeView):boolean;
var
root,node:TTreeNode;
i:integer;
begin
MyDom := CoDOMDocument.Create;
If (Not MyDom.Load(szXMLFile)) Then
begin
LoadXMLToTreeView := False;
exit;
end;
root := pTV.Items.AddFirst(nil,MyDom.nodeName);
For i := 0 To MyDom.childNodes.length - 1 do
begin
node := pTV.Items.AddChild(root, MyDom.childNodes.Item[i].baseName);
node.Data := Pointer(i);
AddXMLElements(MyDom.childNodes.Item[i],
node,
pTV);
end;end;function GetElemvalue(node:ttreenode):string;
var
lst:array [1..10000] of integer;
ct:integer;
nd:ttreenode;
dom:IXMLDOMNode;
begin
nd:=node;
ct:=0;
repeat
inc(ct);
lst[ct]:=integer(nd.data);
if(lst[ct]=-1)then
begin
getelemvalue:='';
exit;
end;
nd:=nd.Parent;
until nd=nil; dec(ct);
dom:=mydom;
while ct>0 do
begin
dom:=dom.childNodes.item[lst[ct]];
dec(ct);
end;
getelemvalue:=dom.xml;
end;
{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
n:ttreenode;
begin
LoadXMLTOTreeView('C:\Program Files\Common Files\Microsoft Shared\Help\dexplore.xml', tvXML);
end;procedure TForm1.tvXMLClick(Sender: TObject);
begin
if (tvxml.selected <> nil) then
begin
rchXML.Text:=GetElemvalue(tvxml.selected);
end;
end;end.不支持编辑功能