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