我需要有关inno设置的帮助,我需要在特定行中保存一些xml节点,但我不知道如何. 这是我的代码 procedure SaveValueToXML(const AFileName, APath, AValue: string);var XMLNode: Variant; XMLDocument: Variant; begin XM
这是我的代码
procedure SaveValueToXML(const AFileName, APath, AValue: string); var XMLNode: Variant; XMLDocument: Variant; begin XMLDocument := CreateOleObject('Msxml2.DOMDocument.6.0'); try XMLDocument.async := False; XMLDocument.load(AFileName); // if (XMLDocument.parseError.errorCode <> 0) then // MsgBox('Install the software. ' + // XMLDocument.parseError.reason, mbError, MB_OK) // else begin XMLDocument.setProperty('SelectionLanguage', 'XPath'); XMLNode := XMLDocument.selectSingleNode(APath); XMLNode.text := AValue; XMLDocument.save(AFileName); end; except MsgBox('Install the software', mbError, MB_OK); end; end; function NextButtonClick(PageID: Integer): Boolean; var XMLFile: string; begin Result := True; if (PageId = wpFinished) then begin XMLFile := ExpandConstant('{pf}\Hell\0\Config.xml'); if FileExists(XMLFile) then begin SaveValueToXML(XMLFile, '//@param', PEdit.Text); //PEdit.text is from a custom input text box in the installer, ignore. SaveValueToXML(XMLFile, '//@path', ExpandConstant('{reg:HKCU\SOFTWARE\Craps,InstallPath}\Test.exe')); end; end; end;
这是我的XML文件:
<?xml version="1.0" encoding="UTF-8"?> <stuffs> <stuff ident="555" path="C:\Program Files (x86)\Other thing\Other.exe" param="-alive" display="1" priority="0"/> <stuff ident="666" path="C:\Program Files (x86)\Craps\test.exe" param="-dead" display="1" priority="0"/> </stuffs>
问题是我的脚本总是写在第一行.我需要的是始终将节点保存在以< stuff ident =“666”开头的行中 提前致谢!
您将需要使用设置文本属性的setAttribute
方法.以下是修改节点属性值的过程:
procedure SaveAttributeValueToXML(const AFileName, APath, AAttribute, AValue: string); var XMLNode: Variant; XMLDocument: Variant; begin XMLDocument := CreateOleObject('Msxml2.DOMDocument.6.0'); try XMLDocument.async := False; XMLDocument.load(AFileName); if (XMLDocument.parseError.errorCode <> 0) then MsgBox('The XML file could not be parsed. ' + XMLDocument.parseError.reason, mbError, MB_OK) else begin XMLDocument.setProperty('SelectionLanguage', 'XPath'); XMLNode := XMLDocument.selectSingleNode(APath); XMLNode.setAttribute(AAttribute, AValue); XMLDocument.save(AFileName); end; except MsgBox('An error occured!' + #13#10 + GetExceptionMessage, mbError, MB_OK); end; end;
以下是如何查询其ident参数值为666且其param属性值将更改为-alive的节点:
SaveAttributeValueToXML('d:\File.xml', '//stuffs/stuff[@ident=''666'']', 'param', '-alive');
有关此处使用的XPath查询的详细信息,请参阅例如到this article
.