I tried this:
procedure TSettings_Frm.FormClose(Sender: TObject; var CloseAction: TCloseAction
);
var
XmlDoc: TXMLDocument;
itemLineNodeList: TDOMNodeList;
curNode: TDOMNode;
i: Integer;
begin
try
//ShowMessage('Starting path: ' + GetCurrentDir());
ReadXMLFile(XmlDoc, 'settings.xml');
itemLineNodeList:= XmlDoc.GetElementsByTagName('updates');
if not Assigned(itemLineNodeList) then exit;
curNode:= itemLineNodeList[4];
curNode.NodeValue:=CheckForUpdates_Chbx.Checked.ToString;
XmlDoc.ReplaceChild(itemLineNodeList[4], curNode);
writeXMLFile(XmlDoc, 'settings.xml');
finally
XmlDoc.Free;
end;
end;
But I'm getting error at runtime for this line:
curNode.NodeValue:=CheckForUpdates_Chbx.Checked.ToString;
Which error are you getting?
Anyway, the node you're getting with
curNode:= itemLineNodeList[4] is not yet the text node inside the
update; to change the text node you'll have to find the child node of
curNode which suppossing your XML is something like:
<update>some string</update>
you could do with
, so try like this:
procedure TSettings_Frm.FormClose(Sender: TObject; var CloseAction: TCloseAction
);
var
XmlDoc: TXMLDocument;
itemLineNodeList: TDOMNodeList;
curNode: TDOMNode;
i: Integer;
begin
try
//ShowMessage('Starting path: ' + GetCurrentDir());
ReadXMLFile(XmlDoc, 'settings.xml');
itemLineNodeList:= XmlDoc.GetElementsByTagName('updates');
if not Assigned(itemLineNodeList) then exit;
curNode:= itemLineNodeList[4];
if curNode.FirstChild.NodeType = TEXT_NODE then begin
curNode.FirstChild.NodeValue := CheckForUpdates_Chbx.Checked.ToString;
XmlDoc.ReplaceChild(itemLineNodeList[4], curNode);
end else
curNode.AppendChild(XMLDoc.CreateTextNode(
CheckForUpdates_Chbx.Checked.ToString));
writeXMLFile(XmlDoc, 'settings.xml');
finally
XmlDoc.Free;
end;
end;
Not the best of implementations but it should work (although I have tha nagging suspicion I'm forgetting something important ...
)