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