1,是不是不能在XML文件后面追加记录。必须先全部读出来加上要增加的记录,然后再写到文件中去呢?!
2,怎么删除一个不定的结点及内容。最好付源代码!谢!

解决方案 »

  1.   

    需要一个XML分析器,然后可以在节点上增加删除修改,最后保存的为文件.
      

  2.   


    这是读:   entpcode:string;   xpnode:IxmldomNode;   xnode:ixmldomnode;   anode:tTreenode;begin   entpcode:=node.Stringdata;   xpnode:=EntpDoc.documentElement.selectSingleNode('//entp[@entpcode="'+entpcode+'"]');   if (xpnode<>nil)and(xpnode.hasChildNodes)then   begin   xnode:=xpnode.firstChild;   anode:=treeview.Items.AddChild(node,xnode.attributes.item[1].text);     anode.StringData:=xnode.attributes.item[0].text;      anode.HasChildren:=true;      while xnode.Get_nextSibling<>nil do      begin   xnode:=xnode.nextSibling;   anode:=treeview.Items.AddChild(node,xnode.attributes.item[1].text);anode.StringData:=xnode.attributes.item[0].text;      end;   end;这是写:var   xElem:IxmlDomElement;   xNode:IxmlDomNode;   ResultStr:string;   Node:tfcTreenode;begin   xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');   xElem:=entpdoc.createElement('entp');   xElem.setAttribute('entpcode',E_eID.text);   xElem.setAttribute('entpname',E_eName.text);   xElem.setAttribute('entplevel','');   xElem.setAttribute('xzqh',E_Xzqh.Text);   xElem.setAttribute('entptype',copy(CBB_EntpType.Text,1,1));  //showmessage(xDoc.documentElement.xml);   xnode.parentnode.insertBefore(xElem,xNode);   //entpdoc.documentElement.insertBefore(xElem,xNode);   entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');   Node:=fcTV_Entp.Selected;   Node:=fcTV_Entp.Items.Insert(Node,E_eName.text);这是修改:var   ResultStr:string;   xNode:IxmlDomNode;   xdoc:IxmlDomDocument;begin   Fselnode:=fcTV_Entp.Selected;   xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');   xNode.attributes.item[0].text:=E_eid.Text;   xNode.attributes.item[1].text:=E_eName.Text;   xNode.attributes.item[3].text:=E_xzqh.Text;   xNode.attributes.item[4].text:=copy(CBB_EntpType.Text,1,1);   entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');   FselNode.Text:=e_ename.Text;这是删除:   xNode:=entpdoc.documentElement.selectSingleNode('//entp[@entpcode="'+fcTV_Entp.Selected.StringData+'"]');   xParentNode:=xNode.parentNode;   if xNode.hasChildNodes then   begin      if messagedlg('要删除节点:"'+fcTV_Entp.Selected.Text+'"及其子节点吗?',mtinformation,[mbyes,mbno],0)=mryes then      begin         xParentNode.removeChild(xnode);         fcTV_Entp.Selected.Delete;      end      else exit;   end   else if messagedlg('要删除节点:"'+fcTV_Entp.Selected.Text+'"吗?',mtinformation,[mbyes,mbno],0)=mryes then      begin         xParentNode.removeChild(xnode);         fcTV_Entp.Selected.Delete;      end      else exit;  entpdoc.save(Extractfilepath(application.exename)+'\res\postcard.sys');