其他分享
首页 > 其他分享> > Delphi 与 XML 示例(直接利用IXMLDocument)

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 

标签:XML,end,nil,示例,Delphi,NNode,rootNode,xmlDoc,CNode
来源: https://www.cnblogs.com/530263009QQ/p/11068559.html