MS XML を使う

マイクロソフトの MSXML で DOM API を使う方法です。
まず MSXML 3.0 をダウンロードします。>ここ 

インストールが完了したら Delphi を起動して [ プロジェクト | タイプライブラリの取り込み ] を選びます。ダイアログが表示されたらリストの中から "Microsoft XML version xx" を選択します。

まず MSXML のインスタンスを生成して XML ファイルを読み込むには、IXMLDOMDocument の load メソッドを使います。

■ MSXML の使用例
//uses MSXML2_TLB
procedure TForm1.Button2Click(Sender: TObject);
var
  domDocument   : IXMLDOMDocument;
begin
  domDocument       :=  CoDOMDocument.Create();
  domDocument.async :=  False;
  if  (domDocument.load('D:\personal.xml')) then  begin  
    //成功
  end else begin
    //失敗
  end;
end;

DOMドキュメントからルートノードを取得するには Get_documentElement メソッドを使います。

■ ルートノードの取得
var
  rootNode      : IXMLDOMElement;
begin
  //ルートノードの取得
  rootNode        :=  domDocument.Get_documentElement();   
  ShowMessage(rootNode.Get_tagName());
end;                                 

ぶら下がるノードを再帰的に取得するには以下のようにします。各インターフェイスのメソッドは DOM API に準拠しているので DOM の資料を確認して下さい。

■ ルートノードの取得
procedure TForm1.Button5Click(Sender: TObject);
var
  domDocument   : IXMLDOMDocument;
  rootNode      : IXMLDOMElement;
begin
  domDocument       :=  CoDOMDocument.Create();
  domDocument.async :=  False;
  if  (domDocument.load('D:\personal.xml')) then  begin
    //ルートノードの取得
    rootNode        :=  domDocument.Get_documentElement();
    PrintNode(rootNode, 0);
  end else begin
    //失敗
  end;
end;

procedure TForm1.PrintNode(parentNode: IXMLDOMNode; Level: integer);   
var
  ix  : integer;
begin
  for ix  :=  0 to  parentNode.childNodes.Get_length - 1  do  begin
    Memo1.Lines.Add(IntToStr(Level) + 
       parentNode.childNodes.item[ix].Get_nodeName());
    PrintNode(parentNode.childNodes.item[ix], Level + 1);
  end;
end;