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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】