unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Panel1: TPanel;
btnLoad: TButton;
Button1: TButton;
Button2: TButton;
Button3: TButton;
XMLDocument1: TXMLDocument;
OpenDialog1: TOpenDialog;
procedure btnLoadClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
procedure DomToTree(XmlNode: IXMLNode; TreeNode: TTreeNode);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnLoadClick(Sender: TObject);
//导入XML文件
begin
OpenDialog1.InitialDir := ExtractFilePath (Application.ExeName);
if OpenDialog1.Execute then
begin
XMLDocument1.LoadFromFile(OpenDialog1.FileName);
Treeview1.Items.Clear;
DomToTree (XMLDocument1.DocumentElement, nil);
TreeView1.FullExpand;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (XMLDocument1.DocumentElement.
Attributes ['text']);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage (XMLDocument1.DocumentElement.
ChildNodes.Nodes[1].ChildValues['author']);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
// 显示信息
ShowMessage (XMLDocument1.DocumentElement.Attributes ['test']);
end;
procedure TForm1.DomToTree (XmlNode: IXMLNode; TreeNode: TTreeNode);
var
I: Integer;
NewTreeNode: TTreeNode;
NodeText: string;
AttrNode: IXMLNode;
begin
// 如果没有节点,那么退出程序
if not (XmlNode.NodeType = ntElement) then
Exit;
// 添加节点
NodeText := XmlNode.NodeName;
if XmlNode.IsTextElement then
NodeText := NodeText + ' = ' + XmlNode.NodeValue;
NewTreeNode := TreeView1.Items.AddChild(TreeNode, NodeText);
//添加属性
for I := 0 to xmlNode.AttributeNodes.Count - 1 do
begin
AttrNode := xmlNode.AttributeNodes.Nodes[I];
TreeView1.Items.AddChild(NewTreeNode,
'[' + AttrNode.NodeName + ' = "' + AttrNode.Text + '"]');
end;
// 添加子节点
if XmlNode.HasChildNodes then
for I := 0 to xmlNode.ChildNodes.Count - 1 do
DomToTree (xmlNode.ChildNodes.Nodes [I], NewTreeNode);
end;
end.