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; 

转自:https://www.cnblogs.com/luckyjan/articles/87787.html 

posted on   金宝的博客  阅读(609)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 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】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示