Вопрос:
Я изо всех сил пытаюсь выяснить, как обновить некоторые атрибуты в файле XML с помощью InstallScript.Я хотел бы использовать правильные функции синтаксического анализа XML, но я не могу найти ничего, что предполагает, что эта версия InstallScript способна на это.Как я могу это сделать?Должен ли я просто попытаться использовать комбинацию FileInsertLine и FileGrep?Не хватает библиотеки?
Справочная информация:
Какие версии программного обеспечения?
Я использую InstallShield 11 на Windows Server2003 R2.
Почему я не просто использую существующую функцию «Изменения файлов XML»?
Поскольку я делаю обновление и сталкиваюсь с этой ошибкой ,Он влияет на функцию изменения файла XML, потому что он привязан к компоненту (ну, это мое предположение).Я слишком долго пробовал официальный обходной путь, но не мог уговорить его работать.В конце концов я обнаружил, что гораздо проще и надежнее копировать файлы, используя InstallScript + однострочный пакетный файл.Это кажется немного хакерским, но это то, что на самом деле работает.
Теперь я пытаюсь выяснить самый простой и самый простой для понимания способ спустя несколько лет воспроизвести эффекты XMLФункция изменения файла в InstallScript.
Пожалуйста, дайте мне знать, если вам нужна любая дополнительная информация, я буду рад предоставить ее.
РЕДАКТИРОВАТЬ:
В конце концов, я все-таки выбрал способ InstallScript сделать это - это было способом, которым все остальное в этом проекте установщика было реализовано, и это выглядело (и оказалось) довольнобыстро сделать.Я начал с кода , показанного TheTraveler в этой теме, и изменил его в соответствии со своими потребностями.
Вот код:
prototype UpdateWebConfigAttributes();
prototype ReplaceValueOf(OBJECT, STRING, STRING);
function UpdateWebConfigAttributes()
OBJECT oDoc, oNode;
NUMBER i;
STRING sWebConfigFilePath;
BOOL successfulLoad;
begin
sWebConfigFilePath = "Path\\To\\Web.config";
if Is(FILE_EXISTS, sWebConfigFilePath) = FALSE then
MessageBox("Could not find Web.config file.", 0);
endif;
// get values from public properties
set oDoc = CreateObject("Msxml2.DOMDocument.4.0");
if !IsObject(oDoc) then
MessageBox("Could not create XML Document", 0);
return -1;
endif;
oDoc.async = FALSE;
oDoc.setProperty("SelectionLanguage", "XPath");
successfulLoad = oDoc.load(sWebConfigFilePath);
if !successfulLoad then
MessageBox("Could not load Web.config as an xml file", SEVERE);
return -1;
endif;
ReplaceValueOf(oDoc, "//add[@key=\"ConnectionDriver\"]", CONNECT_DRIVER);
ReplaceValueOf(oDoc, "//add[@key=\"ConnectionType\"]", CONNECT_TYPE);
ReplaceValueOf(oDoc, "//add[@key=\"ConnectionString\"]", CONNECT_STRING_WEBCONFIG);
ReplaceValueOf(oDoc, "//add[@key=\"ShowConnection\"]", "False");
oDoc.save(sWebConfigFilePath);
set oDoc = NOTHING;
end;
function ReplaceValueOf(oDoc, xPath, valueToPutIn)
OBJECT oNode;
begin
set oNode = oDoc.selectNodes(xPath)(0);
try
oNode.attributes.getNamedItem("value").value = valueToPutIn;
catch
MessageBox("Could not set '" + xPath + "' with '" + valueToPutIn + "'", SEVERE);
endcatch;
end;