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

该博客主要介绍了使用Delphi语言对XML文件进行操作的方法。包含两个函数,一个是从文件存取的函数,可实现添加、修改节点及属性值;另一个是删除节点的函数,能根据指定条件删除XML文件中的节点,操作完成后均会保存文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(*) 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值