问题描述
我想读取 XML 文件的一些节点并在一些自定义输入字段中显示它们的值.然后用户可以根据需要更改这些值,并通过单击 Next
按钮将这些值保存回 XML.
I want to read some nodes of a XML file and show their values in some custom input fields. User can then change the values if needed, and by clicking the Next
button these values should be saved back to the XML.
如何在 Inno Setup 脚本中执行此操作?
How to do this in Inno Setup script ?
推荐答案
使用 CreateOleObject
函数来实例化标准 MSXML2.DOMDocument
COM 对象.以下脚本显示了如何从下面发布的 XML 文件中加载和保存单个节点的文本值(脚本本身的灵感来自 MSDN 的示例):
Use the CreateOleObject
function to instantiate the standard MSXML2.DOMDocument
COM object. The following script shows how to load and save a text value for a single node from the XML file posted below (the script itself was inspired by the examples from MSDN):
[Code]
var
CustomEdit: TEdit;
CustomPageID: Integer;
function LoadValueFromXML(const AFileName, APath: string): string;
var
XMLNode: Variant;
XMLDocument: Variant;
begin
Result := '';
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);
Result := XMLNode.text;
end;
except
MsgBox('An error occured!' + #13#10 + GetExceptionMessage, mbError, MB_OK);
end;
end;
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('The XML file could not be parsed. ' +
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('An error occured!' + #13#10 + GetExceptionMessage, mbError, MB_OK);
end;
end;
procedure InitializeWizard;
var
CustomPage: TWizardPage;
begin
CustomPage := CreateCustomPage(wpWelcome, 'Custom Page',
'Enter the new value that will be saved into the XML file');
CustomPageID := CustomPage.ID;
CustomEdit := TEdit.Create(WizardForm);
CustomEdit.Parent := CustomPage.Surface;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = CustomPageID then
CustomEdit.Text := LoadValueFromXML('C:\Setup.xml', '//Setup/FirstNode');
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = CustomPageID then
SaveValueToXML('C:\Setup.xml', '//Setup/FirstNode', CustomEdit.Text);
end;
这里是脚本中使用的 XML 文件:
Here is the XML file used in the script:
<?xml version="1.0" encoding="UTF-8"?>
<Setup>
<FirstNode>First node value!</FirstNode>
<SecondNode>Second node value!</SecondNode>
</Setup>
这篇关于如何在 Inno Setup 中读写 XML 文档节点值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!