我需要更改app.config文件中一些键的值。我计划使用Inno Setup来完成这个任务。
我找到了在这类任务中使用XML解析器和xpath选择器的优秀技巧。然而,我不知道用什么路径来指向关键& &;
我的app.config看起来大概是这样的:
<configuration>
<runtime>
</runtime>
<appSettings>
<add key="DefaultUrl" value="http://localhost/Some_application"/>
</appSettings>
</configuration>
我想访问键"DefaultUrl"并改变它的"价值"。怎么指向那里?
$x("//configuration/appSettings[@key='DefaultUrl']")
似乎不正确,因为它没有返回任何值。
在Mirtheil评论后编辑:
要更改键值,我使用这个过程:
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;
我叫它
SaveAttributeValueToXML(Some_Application.exe.config', '//configuration/appSettings[@key=''DefaultUrl'']', 'value', 'https://Server_Name/Other_Application');
这个调用在
行上产生一个异常XMLNode.setAttribute(AAttribute, AValue);
异常消息:"变量为空,不能调用">
编辑2:
我找到了答案。调用SaveAttributeValueToXML(Some_Application.exe.config', '//configuration/appSettings/add[@key=''DefaultUrl'']', 'value', 'https://Server_Name/Other_Application');
更改键"DefaultUrl"的值。
我找到了答案。
$x("//configuration/appSettings/add[@key='DefaultUrl']")
返回需要的节点。