Inno设置:提取XML节点并显示它

时间:2015-01-17 12:46:24

标签: inno-setup

我有以下代码,我想将其提取为纯文本,但我无法做到。

代码有效但我需要的是在ExpandConstant字段中显示它。 到目前为止,我尝试了几种方法,但没有运气。

    function LoadValueFromXML(const AFileName, APath: string): string;
    var
      XMLNode: Variant;
      XMLDocument: Variant;  
    begin
      Result := '';
      XMLDocument := CreateOleObject('Msxml2.DOMDocument.3.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 CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = CustomPageID then
        CustomEdit.Text := LoadValueFromXML('C:\Games\World_of_Tanks_test\WoTLauncher.xml', '//info/patch_info_urls/item');
    end;

   procedure ClienteWot();
    var
      StaticText: TNewStaticText;
    begin
      StaticText := TNewStaticText.Create(WizardForm);
      StaticText.Parent := WizardForm.SelectComponentsPage;
      StaticText.Left := 425;
      StaticText.Top := ScaleY(40);
      StaticText.Font.Style := [fsBold];
      //StaticText.Font.Color := clRed;
      StaticText.Caption := ExpandConstant('Cliente WOT: -->>> Show XML Url <<<---');
    end;

1 个答案:

答案 0 :(得分:0)

如果要将值内联到可以传递给ExpandConstant函数调用的字符串中,可以使用例如Format函数:

var
  ...
  URL: string;
begin
  ...
  URL := LoadValueFromXML('C:\MyFile.xml', '//node/subnode');
  StaticText.Caption := ExpandConstant(Format('{username} %s', [URL]));
end;

上面的伪代码示例读取XML值并将返回的值分配给URL变量。然后它评估第二行的内部语句:

Format('{username} %s', [URL])

URL字符串值内联到给定字符串(代替%s)并生成如下字符串:

'{username} www.example.com'

然后该字符串由ExpandConstant函数调用(外部语句)处理并分配给静态文本标题,可能是例如:

'MyUserName www.example.com'