添加控件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;