首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi XML 程式設計入門:以 MSXML DOM 解析器讀寫 XML 檔案

     編輯:Delphi

XML (eXtensible Markup Language) 自推出以來便成為資料交換的標準格式。Borland Delphi 從 6.0 版起內建 XML 元件包,採用 Microsoft MSXML DOM 解析器,不僅符合標準,對中文元素名稱與屬性的支援也大幅優於舊版的 XMLParser。本文將透過一個完整的「學生花名冊」範例,帶領讀者快速掌握 Delphi 中 XML 的讀取與寫入操作。

範例 XML 結構

我們將操作的 Input.xml 採用 Big5/GB2312 編碼,結構如下:

<?xml version="1.0" encoding="GB2312"?>
<學生花名冊>
  <學生 性別="男">
    <姓名>李華</姓名>
    <年齡>14</年齡>
    <電話>6287555</電話>
  </學生>
  <學生 性別="男">
    <姓名>張三</姓名>
    <年齡>16</年齡>
    <電話>8273425</電話>
  </學生>
</學生花名冊>

對應的 Delphi 資料結構定義:

type
  TStudent = class
    sex  : string; // 學生性別
    name : string; // 學生姓名
    age  : integer; // 學生年齡
    phone: string; // 電話號碼
  end;

表單設計與元件配置

在表單上放置兩個 TXMLDocument 元件 (位於 Internet 分頁):

  • InXMLDoc:用於載入 Input.xml。
  • OutXMLDoc:用於建構並輸出 Output.xml。

另加一個按鈕 Button1,所有邏輯寫在其 OnClick 事件中。

讀取 XML:從檔案到記憶體物件清單

var
  Root, Parent_Node, Child_Node: IXMLNode;
  Student: TStudent;
  List: TList;
  i: Integer;
begin
  List := TList.Create;
  try
    InXMLDoc.LoadFromFile('Input.xml');
    Root := InXMLDoc.DocumentElement; // 取得根節點 <學生花名冊>

    Parent_Node := Root.ChildNodes.First;
    while Parent_Node <> nil do
    begin
      if Parent_Node.NodeName = '學生' then
      begin
        Student := TStudent.Create;
        Student.sex := Parent_Node.Attributes['性別'];

        Child_Node := Parent_Node.ChildNodes.First;
        while Child_Node <> nil do
        begin
          if Child_Node.NodeName = '姓名' then
            Student.name := Child_Node.Text
          else if Child_Node.NodeName = '年齡' then
            Student.age := StrToInt(Child_Node.Text)
          else if Child_Node.NodeName = '電話' then
            Student.phone := Child_Node.Text;

          Child_Node := Child_Node.NextSibling;
        end;
        List.Add(Student);
      end;
      Parent_Node := Parent_Node.NextSibling;
    end;
    // 此時 List 包含所有學生物件,可供後續處理
  finally
    // 注意:List 內的物件需在寫入 XML 後再釋放
  end;

寫入 XML:從物件清單產生檔案


  OutXMLDoc.Active := True; // 啟用文件,自動建立空白 DOM
  OutXMLDoc.Encoding := 'GB2312';
  Root := OutXMLDoc.AddChild('學生花名冊'); // 建立根節點

  for i := 0 to List.Count - 1 do
  begin
    Student := TStudent(List.Items[i]);
    if Student <> nil then
    begin
      Parent_Node := Root.AddChild('學生');
      Parent_Node.Attributes['性別'] := Student.sex;

      Child_Node := Parent_Node.AddChild('姓名');
      Child_Node.Text := Student.name;

      Child_Node := Parent_Node.AddChild('年齡');
      Child_Node.Text := IntToStr(Student.age);

      Child_Node := Parent_Node.AddChild('電話');
      Child_Node.Text := Student.phone;
    end;
  end;

  OutXMLDoc.SaveToFile('Output.xml');
  OutXMLDoc.Active := False;

  // 釋放資源
  for i := 0 to List.Count - 1 do
    TStudent(List.Items[i]).Free;
  List.Free;

跨語言應用提示

Delphi 的 TXMLDocument 封裝了 MSXML COM 介面,C++Builder 同樣擁有相同元件,只需將 Pascal 語法轉為 C++ 即可直接套用上述邏輯。

小結

透過 IXMLNode 介面操作節點、屬性與文字內容,Delphi 處理 XML 既直觀又強大。掌握「載入 → 走訪節點 → 解析資料 → 建立新節點 → 存檔」的基本流程,即可應付大多數 XML 資料交換需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved