在Delphi和Lazarus的开发场景中,XML常被用作配置文件、数据交换格式,掌握XML的操作方法对开发者来说非常重要。两个开发工具都提供了对应的组件和单元支持XML处理,核心是基于XMLDocument组件实现各类操作。

Delphi操作XML的方法
Delphi中操作XML主要使用XMLIntf和XMLDoc单元,需要先在工程中引入这两个单元,然后使用IXMLDocument接口来操作XML文件。
读取XML文件内容
下面的示例演示了如何读取一个XML文件中的指定节点内容:
uses
XMLIntf, XMLDoc;
procedure TForm1.ReadXMLFile;
var
XMLDoc: IXMLDocument;
RootNode, TargetNode: IXMLNode;
begin
// 创建XML文档对象并加载文件
XMLDoc := LoadXMLDocument('D:test.xml');
// 获取根节点
RootNode := XMLDoc.DocumentElement;
if RootNode <> nil then
begin
// 查找名为user的节点
TargetNode := RootNode.ChildNodes.FindNode('user');
if TargetNode <> nil then
begin
// 输出节点的name属性值
ShowMessage(TargetNode.Attributes['name']);
end;
end;
end;
创建并写入XML文件
创建新的XML文件并写入节点和属性的示例如下:
uses
XMLIntf, XMLDoc;
procedure TForm1.CreateXMLFile;
var
XMLDoc: IXMLDocument;
RootNode, UserNode: IXMLNode;
begin
// 创建XML文档对象
XMLDoc := NewXMLDocument;
// 设置XML版本和编码
XMLDoc.Encoding := 'UTF-8';
XMLDoc.Options := [doNodeAutoIndent];
// 创建根节点
RootNode := XMLDoc.AddChild('users');
// 创建子节点并设置属性
UserNode := RootNode.AddChild('user');
UserNode.Attributes['name'] := '张三';
UserNode.Attributes['age'] := '25';
// 添加子节点的文本内容
UserNode.Text := '普通用户';
// 保存文件
XMLDoc.SaveToFile('D:new_test.xml');
end;
Lazarus操作XML的方法
Lazarus操作XML可以使用自带的XMLRead、XMLWrite和DOM单元,也可以使用和Delphi类似的XMLDocument组件,下面是基于DOM单元的示例。
读取XML节点内容
uses
DOM, XMLRead;
procedure ReadXMLInLazarus;
var
Doc: TXMLDocument;
RootNode, ChildNode: TDOMNode;
begin
Doc := TXMLDocument.Create;
try
// 读取XML文件
ReadXMLFile(Doc, 'D:test.xml');
RootNode := Doc.DocumentElement;
if RootNode <> nil then
begin
ChildNode := RootNode.FirstChild;
while ChildNode <> nil do
begin
// 输出节点名称和属性
if ChildNode.HasAttributes then
begin
WriteLn(ChildNode.NodeName, ':', ChildNode.Attributes.GetNamedItem('name').NodeValue);
end;
ChildNode := ChildNode.NextSibling;
end;
end;
finally
Doc.Free;
end;
end;
修改XML节点内容
修改已有XML文件的节点属性或文本内容的示例如下:
uses
DOM, XMLRead, XMLWrite;
procedure ModifyXMLInLazarus;
var
Doc: TXMLDocument;
TargetNode: TDOMNode;
begin
Doc := TXMLDocument.Create;
try
ReadXMLFile(Doc, 'D:test.xml');
TargetNode := Doc.DocumentElement.FindNode('user');
if TargetNode <> nil then
begin
// 修改属性值
TargetNode.Attributes.SetNamedItem(Doc.CreateAttribute('age'));
TargetNode.Attributes.GetNamedItem('age').NodeValue := '26';
// 修改节点文本内容
TargetNode.TextContent := 'VIP用户';
end;
WriteXMLFile(Doc, 'D:modified_test.xml');
finally
Doc.Free;
end;
end;
注意事项
- 操作XML文件时要先判断文件是否存在,避免出现文件找不到的错误
- 处理节点属性时要先判断属性是否存在,防止访问空属性导致异常
- XML文件的编码要和代码中设置的编码保持一致,避免出现中文乱码问题
- Lazarus中如果使用XMLDocument组件,需要和Delphi一样引入对应的单元,操作逻辑基本一致
DelphiLazarusXML操作XMLDocument修改时间:2026-06-20 16:36:36