1. 程式人生 > >inno setup修改xml節點

inno setup修改xml節點

1、在做客戶端多語言的安裝包時,配置寫在了xml檔案中(而不是ini檔案),就需要在安裝的最後修改xml檔案的多語言節點,方法為:

[Code]

// 獲取當前語言

function MyLangName(): String;      
begin               
  Result := ActiveLanguage();
end;

//儲存xml檔案的語言
procedure SaveLan();
var
  XMLFile: String; // xml路徑
  KeyName: String; // 語言節點名稱
  KeyValue: String; // 語言節點值
  XMLDocument: Variant; // xml文件
  rootNode: Variant; // xml根節點
  lanNode: Variant; // 語言節點

begin
    XMLFile := ExpandConstant('{app}\') + '***.xml';// xml路徑
    KeyName := 'language';
    KeyValue := MyLangName();
    XMLDocument := CreateOleObject('MSXML2.DOMDocument');
    XMLDocument.async := False;
    XMLDocument.resolveExternals := False;
    XMLDocument.load(XMLFile);// 載入
    rootNode := XMLDocument.documentElement;

    lanNode := rootNode.SelectSingleNode('base');// 語言節點
    lanNode.SetAttribute(KeyName, KeyValue); // set 語言
    XMLDocument.Save(XMLFile);// 儲存
  end;

xml檔案為:

<?xml version='1.0' encoding='utf-8'?>
   <base language="English"/>

另外一個問題就是,程序SaveLan什麼時候呼叫的問題,這裡是要安裝完成後,在執行程式之前就要修改節點,可使用CurPageChanged或CurStepChanged程序,如:

// step,不能用ssDone,否則安裝完啟動時還來不及設定語言
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of ssPostInstall:
       SaveLan();
  end;
end;

在安裝完成後,會自動呼叫該程序。至此,修改xml完成。

2、ini檔案修改欄位

[Code]

function MyLangName(Param:String): String;      
begin               
  Result := ActiveLanguage();
end;

[INI]  
Filename: "lan.ini"; Section: "settings"; Key: "language"; String: "{code:MyLangName}";