DomTreeForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit DomTreeForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc, ComCtrls, ExtCtrls;
  6. type
  7.   TFormXmlTree = class(TForm)
  8.     XMLDocument1: TXMLDocument;
  9.     btnLoad: TButton;
  10.     OpenDialog1: TOpenDialog;
  11.     TreeView1: TTreeView;
  12.     Panel1: TPanel;
  13.     Button1: TButton;
  14.     Button2: TButton;
  15.     Button3: TButton;
  16.     procedure btnLoadClick(Sender: TObject);
  17.     procedure Button1Click(Sender: TObject);
  18.     procedure Button2Click(Sender: TObject);
  19.     procedure Button3Click(Sender: TObject);
  20.   private
  21.     procedure DomToTree(XmlNode: IXMLNode; TreeNode: TTreeNode);
  22.     { Private declarations }
  23.   public
  24.     { Public declarations }
  25.   end;
  26. var
  27.   FormXmlTree: TFormXmlTree;
  28. implementation
  29. {$R *.dfm}
  30. procedure TFormXmlTree.btnLoadClick(Sender: TObject);
  31. begin
  32.   OpenDialog1.InitialDir := ExtractFilePath (Application.ExeName);
  33.   if OpenDialog1.Execute then
  34.   begin
  35.     XMLDocument1.LoadFromFile(OpenDialog1.FileName);
  36.     Treeview1.Items.Clear;
  37.     DomToTree (XMLDocument1.DocumentElement, nil);
  38.     TreeView1.FullExpand;
  39.   end;
  40. end;
  41. procedure TFormXmlTree.DomToTree (XmlNode: IXMLNode; TreeNode: TTreeNode);
  42. var
  43.   I: Integer;
  44.   NewTreeNode: TTreeNode;
  45.   NodeText: string;
  46.   AttrNode: IXMLNode;
  47. begin
  48.   // skip text nodes and other special cases
  49.   if not (XmlNode.NodeType = ntElement) then
  50.     Exit;
  51.   // add the node itself
  52.   NodeText := XmlNode.NodeName;
  53.   if XmlNode.IsTextElement then
  54.     NodeText := NodeText + ' = ' + XmlNode.NodeValue;
  55.   NewTreeNode := TreeView1.Items.AddChild(TreeNode, NodeText);
  56.   // add attributes
  57.   for I := 0 to xmlNode.AttributeNodes.Count - 1 do
  58.   begin
  59.     AttrNode := xmlNode.AttributeNodes.Nodes[I];
  60.     TreeView1.Items.AddChild(NewTreeNode,
  61.       '[' + AttrNode.NodeName + ' = "' + AttrNode.Text + '"]');
  62.   end;
  63.   // add each child node
  64.   if XmlNode.HasChildNodes then
  65.     for I := 0 to xmlNode.ChildNodes.Count - 1 do
  66.       DomToTree (xmlNode.ChildNodes.Nodes [I], NewTreeNode);
  67. end;
  68. procedure TFormXmlTree.Button1Click(Sender: TObject);
  69. begin
  70.   ShowMessage (XMLDocument1.DocumentElement.
  71.     Attributes ['text']);
  72. //  AttributeNodes.Nodes[0].NodeValue);
  73. end;
  74. procedure TFormXmlTree.Button2Click(Sender: TObject);
  75. begin
  76.   ShowMessage (XMLDocument1.DocumentElement.
  77.     ChildNodes.Nodes[1].ChildValues['author']);
  78. end;
  79. procedure TFormXmlTree.Button3Click(Sender: TObject);
  80. begin
  81.   // this call creates an error with an odd essage
  82.   ShowMessage (XMLDocument1.DocumentElement.Attributes ['test']);
  83. end;
  84. end.