Я пытаюсь написать короткий скрипт установки для обновления значения в XML-файле (myplatforinfo.config).
Я постыдно украл код из [этого поста по аналогичной задаче] {/2827400/kak-obnovit-atributy-v-faile-xml-s-pomoschy-installscript},но взломали его для моих нужд.
/// <summary>
/// This function reads in the fddId.config and alters the number associated
/// with the serial number fo the installed package.
/// <summary>
function UpdateDeviceFirmwareVersion(hMSI)
OBJECT oDoc;
STRING sConfigFilePath;
BOOL successfulLoad;
NUMBER retVal;
begin
sConfigFilePath = "C:\\myplatforinfo.config";
retVal = 0;
if (Is(FILE_EXISTS, sConfigFilePath)) = FALSE then
MessageBox("Could not find fddId file.", 0);
retVal = -1;
endif;
// get values from public properties
set oDoc = CreateObject("Msxml2.DOMDocument.4.0");
if (!IsObject(oDoc)) then
MessageBox("Could not create XML Document", 0);
retVal = -1;
endif;
oDoc.async = FALSE;
oDoc.setProperty("SelectionLanguage", "XPath");
successfulLoad = oDoc.load(sConfigFilePath);
if (successfulLoad < 0) then
MessageBox("Could not load the fddId as an xml file", SEVERE);
retVal = -1;
endif;
if (retVal = -1) then
return retVal;
abort;
endif;
ReplaceValueOf(oDoc, "//platformID/SerialNumber/version", "1");
oDoc.save(sConfigFilePath);
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;
Однако он падает на метод загрузки, нужна помощь!:
successfulLoad = oDoc.load(sConfigFilePath);
if (successfulLoad < 0) then
MessageBox("Could not load the fddId as an xml file", SEVERE);
retVal = -1;
endif;
Я не уверен, почему.Этот файл является допустимым XML-файлом, и он корректно обрабатывается кодом .Net, который его использует.Ниже я включил упрощенную версию XML-файла конфигурации.Только заголовок и теги, которые используются, но структура идентична.Там есть комментарии, может ли это повлиять на синтаксический анализатор InstallShield?
<?xml version="1.0" encoding="utf-8"?>
<platformIDxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<type>35</type>
<manufacturer>14</manufacturer>
<SerialNumber>
<version>2</version>
</SerialNumber>
</platformID>
Я только некоторое время боролся с InstallShield 2011, но я быстро учусь любить его мощь и ненавижу его поддержку разработки иотсутствие четкого интерфейса.Любая помощь приветствуется :).
РЕДАКТИРОВАТЬ: Как Майкл Урман любезно указал, я не правильно обрабатывал логическое возвращение из моей загрузки документа XML.Я сделал это редактирование, и мой сценарий теперь доходит до 'getNamedItem' и устанавливаю значение.
Возможно ли это потому, что поле, которое я хочу установить, не является именованным атрибутом "value"?Мои элементы не имеют каких-либо атрибутов, но я подозревал, что значением для элемента был атрибут с именем 'value', lol.Я предположил, что неправильно?
Дальнейшее редактирование!Нет, тогда это не так ... Я попробовал node.Value и маршрут именованного элемента, так как оба пути отладчика дают сбой в строке 'setter' для нового значения.Думаю, мне может понадобиться встроенная функция.