Delphi 与 XML 示例(直接利用IXMLDocument)


本文整理自网络,侵删。

 (*) uses msxml,XMLIntf,XMLDoc;

(1)//从文件存取
function writeXML(XMLName,nodeName,nodeValue:string;proID:integer):integer;
var
xmlDoc:IXMLDocument;
rootNode,CNode,NNode:IXMLNode;
iValue,iReturn:integer;
sValue:string;
begin
result := -1 ;
if not fileExists(XMLName) then exit;
xmlDoc := TXMLDocument.Create(nil); //***** 创建TXMLDocument *****
xmlDoc.Active := True; iReturn:=-1;
try
try
xmlDoc.LoadFromFile(XMLName) ; //***** 载入XML文件 *****
xmlDoc.Version := '1.0';
xmlDoc.Encoding :='GB2312';
rootNode := xmlDoc.ChildNodes.FindNode('Document'); //***** 查找结点 *****
CNode := rootNode.ChildNodes.FindNode('product');
if CNode<>nil then
begin
// iValue := CNode.GetNodeValue; //***** 取结点值 *****
iValue:=CNode.Attributes['proID']; //***** 取结点属性 *****
while (proID<>iValue) and (CNode<>nil) do //找某
begin
NNode := rootNode.ChildNodes.FindSibling(CNode,1); //***** 查找下一结点 *****
CNode := NNode;
if CNode<>nil then iValue:=CNode.Attributes['proID'];
end;
end;
if CNode=nil then //某 没找到 ****
begin
CNode:=rootNode.AddChild('product'); //***** 添加一个结点 *****
CNode.SetAttribute('proID', proID); // ***** 写结点属性 *****
end;
CNode.SetAttribute('uninstall', 'false');
NNode := CNode.ChildNodes.FindNode(nodeName);
if NNode=nil then
NNode:=CNode.AddChild(nodeName);
NNode.SetNodeValue(nodeValue) ; // ***** 写结点值 *****
xmlDoc.SaveToFile(XMLName) ;
except
iReturn:=-1;
end;
finally
xmlDoc := nil ; //***** 释放TXMLDocument *****
result := iReturn;
end;
end;

(2)删除结点
function removeNode(XMLName:string;proID:integer):integer;
var
xmlDoc:IXMLDocument;
rootNode,CNode,NNode:IXMLNode;
iValue,iReturn:integer;
sValue:string;
begin
result := -1 ;
if not fileExists(XMLName) then exit;
xmlDoc := TXMLDocument.Create(nil);
xmlDoc.Active := True; iReturn:=-1;
try
try
xmlDoc.LoadFromFile(XMLName) ;
xmlDoc.Encoding :='GB2312';
rootNode := xmlDoc.ChildNodes.FindNode('Document');
CNode := rootNode.ChildNodes.FindNode('product');
if CNode<>nil then
begin
iValue:=CNode.Attributes['proID'];
while (proID<>iValue) and (CNode<>nil) do //找某
begin
NNode := rootNode.ChildNodes.FindSibling(CNode,1);
CNode := NNode;
if CNode<>nil then iValue:=CNode.Attributes['proID'];
end;

end;
if CNode<>nil then rootNode.ChildNodes.Remove(CNode); //找到 ,删除

xmlDoc.SaveToFile(XMLName) ;
iReturn := 0;
except
iReturn:=-1;
end;
finally
xmlDoc := nil ;
result := iReturn;
end;
end;

相关阅读 >>

Delphi spcomm的一些用法注意

Delphi 比较俩组ip地址是否一样

Delphi webbrowser1 保存文档为 .html

Delphi通过将数据放入exe的资源信息中的方式制作自已的安装工具

Delphi firedac 下的 sqlite [7] - 备份、优化、事务(transaction)

Delphi net.httpclient正则批量获取网页代码中的数值

Delphi 获取邮箱中的用户名

Delphi 小数点四舍五入问题

Delphi 对汉字字符串的截取问题

Delphi 如何获得其他进程的token

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



打赏

取消

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

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

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

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

评论

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