1. unit Unit1;   

  2.   

  3. interface  

  4.   

  5. uses  

  6.    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   

  7.    Dialogs, XMLIntf, XMLDoc, StdCtrls;   

  8.   

  9. type  

  10.    TStudent = Class(TObject)   

  11.   public  

  12.      Name: string;   

  13.      Sex: string;   

  14.      Age: Integer;   

  15.      Phone: string;   

  16.   end;   

  17.    TForm1 = class(TForm)   

  18.      Button1: TButton;   

  19.     procedure FormCreate(Sender: TObject);   

  20.     procedure FormDestroy(Sender: TObject);   

  21.     procedure Button1Click(Sender: TObject);   

  22.   private  

  23.     { Private declarations }  

  24.      FXMLDoc: IXMLDocument;  // XML文档   

  25.      FDocElement: IXMLNode;  // 根节点   

  26.      FList: TList;   

  27.   public  

  28.     { Public declarations }  

  29.   end;   

  30.   

  31. var  

  32.    Form1: TForm1;   

  33.   

  34. implementation  

  35.   

  36. uses Student;   

  37.   

  38. {$R *.dfm}  

  39.   

  40. const  

  41.    XMLString =   

  42. '<?xml version="1.0" encoding="GB2312"?>' +   

  43. '<Students>' +   

  44. '     <Student Sex = "">' +   

  45. '         <Name>文文</Name>' +   

  46. '         <Age>18</Age>' +   

  47. '         <Phone>4745723</Phone>' +   

  48. '     </Student>' +   

  49. '     <Student Sex = "">' +   

  50. '         <Name>喃喃</Name>' +   

  51. '         <Age>17</Age>' +   

  52. '         <Phone>4644563</Phone>' +   

  53. '     </Student>' +   

  54. '</Students>';   

  55.   

  56. procedure TForm1.FormCreate(Sender: TObject);   

  57. begin  

  58.    FXMLDoc := TXMLDocument.Create(nil);   

  59.    FXMLDoc.XML.Text := XMLString;   

  60.    FXMLDoc.Active := True;   

  61.    FList := TList.Create;   

  62.    FDocElement := FXMLDoc.DocumentElement;   

  63. end;   

  64.   

  65. procedure TForm1.FormDestroy(Sender: TObject);   

  66. var  

  67.    i: Integer;   

  68. begin  

  69.    FXMLDoc.Active := False;   

  70.   for i := 0 to Flist.Count - 1 do  

  71.      TStudent(FList.Items[i]).Free;   

  72.    FList.Free;   

  73. end;   

  74.   

  75. procedure TForm1.Button1Click(Sender: TObject);   

  76. var  

  77.    i: Integer;   

  78.    Stu: TStudent;   

  79.    StuNode: IXMLNode;   

  80. begin  

  81.   for i := 0 to FDocElement.ChildNodes.Count - 1 do  

  82.   begin  

  83.      StuNode := FDocElement.ChildNodes[i];   

  84.      Stu := TStudent.Create;   

  85.      Stu.Name := StuNode.ChildValues['Name'];   

  86.      Stu.Sex := StuNode.Attributes['Sex'];   

  87.      Stu.Age := StuNode.ChildValues['Age'];   

  88.      Stu.Phone := StuNode.ChildValues['Phone'];   

  89.      FList.Add(Stu);   

  90.   end;   

  91. end;   

  92.   

  93. end.