Вопрос:
Я изо всех сил пытаюсь понять, как обновить некоторые атрибуты в файле XML с помощью InstallScript. Я хотел бы использовать правильные функции синтаксического анализа XML, но я не могу найти ничего, что предполагало бы, что эта версия InstallScript способна на это. Как я могу это сделать? Должен ли я просто попытаться вернуться к комбинации FileInsertLine и FileGrep? Есть ли библиотека, которую мне не хватает?
Справочная информация:
Какие версии программного обеспечения?
Я использую InstallShield 11 в Windows Server 2003 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;