Delphi XMLDocument控件之XML


本文整理自网络,侵删。

  添加控件XMLDocument。例子XML文件内容:(c:\temp\test.xml)

<!--StartFragment--><?xml version="1.0" encoding="gb2312"?>
<科室名单 备注="测试">

<人员 职务="科长" 备注="正局级">
<姓名>张三</姓名>
<性别>男</性别>
<年龄>34</年龄>
</人员>

<人员 职务="付科长">
<姓名>李四</姓名>
<性别>女</性别>
<年龄>43</年龄>
</人员>

<人员>
<姓名>王五</姓名>
<性别>女</性别>
<年龄>25</年龄>
</人员>

<人员>
<姓名>孙六</姓名>
<性别>男</性别>
<年龄>52</年龄>
</人员>

<辅助人员></辅助人员>

</科室名单>

打开1:
XMLDocument1.LoadFromFile('c:\temp\test.xml');
Memo1.Lines := XMLDocument1.XML; {查看}
打开2:
XMLDocument1.FileName := 'c:\temp\test.xml';
XMLDocument1.Active := True; {激活}
Memo1.Lines := XMLDocument1.XML; {查看}
打开3:
ms := TMemoryStream.Create;
ms.LoadFromFile('c:\temp\test.xml');
XMLDocument1.LoadFromStream(ms);
ms.Free;
Memo1.Lines := XMLDocument1.XML; {查看}

获取根目录下的元素数1:
XMLDocument1.LoadFromFile('c:\temp\test.xml');
ShowMessage(IntToStr(XMLDocument1.DocumentElement.ChildNodes.Count)); {4}
{DocumentElement 是根节点} {ChildNodes 是节点包含的子节点的列表}
获取根目录下的元素数2:
var nodeList:IXMLNodeList; {定义一个节点列表对象}
nodeList := XMLDocument1.DocumentElement.ChildNodes;
{把根节点下的子节点列表赋给节点列表对象}

获取元素内容:
ShowMessage(XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes['姓名'].Text); {张三}
ShowMessage(XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes['性别'].Text); {男}
ShowMessage(XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes['年龄'].Text); {34}
{可以通过位置访问子节点, 如: ChildNodes[0] 表示子节点列表中的第一个元素}
{可以通过子节点名访问子节点, 如: ChildNodes['姓名']}
{但在节点名一样的情况下, 只能通过位置访问}
{任何情况下都可以通过位置访问, 譬如:}
ShowMessage(XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0].Text); {张三}
//访问第二个人的信息
procedure TForm1.Button2Click(Sender: TObject);
var
nodeList: IXMLNodeList;
node: IXMLNode;
begin
nodeList := XMLDocument1.DocumentElement.ChildNodes;
node := nodeList[1];
ShowMessage(node.ChildNodes['姓名'].Text); {李四}
ShowMessage(node.ChildNodes['性别'].Text); {女}
ShowMessage(node.ChildNodes['年龄'].Text); {43}
end;

访问节点属性:
ShowMessage(IntToStr(XMLDocument1.DocumentElement.AttributeNodes.Count)); {1}
ShowMessage(XMLDocument1.DocumentElement.Attributes['备注']); {测试}
{通过属性名访问属性, 一般用 Attributes['属性名']}
ShowMessage(XMLDocument1.DocumentElement.AttributeNodes[0].Text); {测试}
{通过属性位置访问属性, 必须用 AttributeNodes[位置ID]}
{但通过 AttributeNodes['属性名'] 也可以访问属性, 譬如:}
ShowMessage(XMLDocument1.DocumentElement.AttributeNodes['备注'].Text); {测试}
{AttributeNodes 是某个节点的属性列表, 它也是一个节点列表对象, 譬如:}
nodeList := XMLDocument1.DocumentElement.AttributeNodes;
node := nodeList[0];
ShowMessage(node.Text); {测试}
node := nodeList['备注'];
ShowMessage(node.Text); {测试}
//访问第二个人的属性信息
nodeList := XMLDocument1.DocumentElement.ChildNodes;
node := nodeList[1];
ShowMessage(IntToStr(node.AttributeNodes.Count)); {1}
ShowMessage(node.Attributes['职务']); {副科长}
ShowMessage(node.AttributeNodes[0].Text); {副科长}

获取节点名称与节点的属性名称:
node := XMLDocument1.DocumentElement;
ShowMessage(node.NodeName); {科室名单}

node := node.ChildNodes[0]; {XMLDocument1.DocumentElement.ChildNodes[0]}
ShowMessage(node.NodeName); {人员}

node := node.ChildNodes[0]; {XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes[0]}
ShowMessage(node.NodeName); {姓名}

添加与删除节点:
var newNode, newNodeAdd: IXMLNode;
newNode := XMLDocument1.DocumentElement.AddChild('人员');
newNode.Attributes['职务'] := '秘书';

newNodeAdd := newNode.AddChild('姓名');
newNodeAdd.Text := '小翠';

newNodeAdd := newNode.AddChild('性别');
newNodeAdd.Text := '女';

Memo1.Lines := XMLDocument1.XML; {查看}
{会在尾部增加:
<人员 职务="秘书"><姓名>小翠</姓名><性别>女</性别></人员>
}
//删除
procedure TForm1.Button2Click(Sender: TObject);
var
nodeList: IXMLNodeList;
begin
nodeList := XMLDocument1.DocumentElement.ChildNodes;
nodeList.Delete(nodeList.Count-1); {删除最后一条}

Memo1.Lines := XMLDocument1.XML; {查看}
end;

创建与保存 xml:
//利用 XML 属性创建 xml 文件
procedure TForm1.Button1Click(Sender: TObject);
begin
//XMLDocument1.Active := true;
XMLDocument1.XML.Add('<?xml version="1.0" encoding="gb2312"?>');
XMLDocument1.XML.Add('<科室名单 备注="测试">');
XMLDocument1.XML.Add('<人员 职务="科长" 备注="正局级">');
XMLDocument1.XML.Add('<姓名>张三</姓名>');
XMLDocument1.XML.Add('<性别>男</性别>');
XMLDocument1.XML.Add('<年龄>34</年龄>');
XMLDocument1.XML.Add('</人员>');
XMLDocument1.XML.Add('</科室名单>');

ShowMessage(XMLDocument1.XML.Text); {查看}
end;

//创建 xml 文件的标准方法
procedure TForm1.Button2Click(Sender: TObject);
var
pNode,cNode: IXMLNode; {定义两个节点: 父节点、子节点}
begin
XMLDocument1.Active := True; {必须先激活}
XMLDocument1.Version := '1.0'; {设置版本}
XMLDocument1.Encoding := 'GB2312'; {设置语言}

pNode := XMLDocument1.AddChild('科室名单'); {添加的第一个节点是根节点, 现在的 pNode 是根节点}
pNode.SetAttribute('备注', '测试'); {为根节点设置属性}

pNode := pNode.AddChild('人员'); {为根节点添加子节点, 现在的 pNode 是 "人员" 节点}
pNode.SetAttribute('职务', '科长'); {设置属性}
pNode.SetAttribute('备注', '正局级');

cNode := pNode.AddChild('姓名'); {为 pNode 添加子节点, 返回值 cNode 指向了新添加的节点}
cNode.Text := '张三';

cNode := pNode.AddChild('性别');
cNode.Text := '男';

cNode := pNode.AddChild('年龄');
cNode.Text := '34';

ShowMessage(XMLDocument1.XML.Text); {查看}
end;

//保存
procedure TForm1.Button3Click(Sender: TObject);
begin
XMLDocument1.SaveToFile('c:\temp\0.xml');
end;


相关阅读 >>

Delphi 蜂鸣器发声

Delphi 强迫将半型英数字转换成全型英数字

Delphi wmi 获取操作系统信息

Delphi 使richedit中的链接可以点击

Delphi分割字符串的函数--extractstrings

Delphi xe 10.2.1 fmx平台 在图片上写字方法

Delphi编写涂鸦桌面的小程序

Delphi 动态设置屏幕分辨率

Delphi android adb usb上读取设备信息

Delphi逐个读取access中的数据

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...