Невозможно найти узел в файле XML - PullRequest
0 голосов
/ 14 января 2019

У меня есть установщик, с помощью которого мне нужно обновить файл XML. Я делал подобные вещи много раз, чтобы обновить файлы конфигурации приложения. Но этот файл XML немного отличается, и я столкнулся с проблемой, чтобы найти узел. Я не знаю, почему это не работает. У меня ниже XML:

<?xml version="1.0" encoding="utf-8"?>
<Siemens.Automation.Diagnostics 

 xmlns="http://www.siemens.com/Automation/2004/09/Diagnostics/ReportConfiguration">
       <Report IncludeConfigFile="true" IncludeHtml="true" DisplayName="Red White Application" TargetVersion="1.0.0">
        <MergePlugIns>
          <MergePlugIn Path="Siemens.Automation.Diagnostics.PlugIn.dll" Type="Siemens.Automation.Diagnostics.PlugIn.ConfigurationMerger" />
        </MergePlugIns>

      </Report>
    </Siemens.Automation.Diagnostics>

Я хочу обновить значение типа MergePlugin, но у меня возникла проблема. Вот что я делаю:

<util:XmlFile Id="UpdateProductName" Action="setValue" File="[ERRORREPORT]$(var.ErrorReportAdrFile)"
                      ElementPath="/Siemens.Automation.Diagnostics[\[]@xmlns='http://www.siemens.com/Automation/2004/09/Diagnostics/ReportConfiguration'[\]]/Report[\[]@DisplayName='Red White Application'[\]]/MergePlugIns/MergePlugIn[\[]@Path='Siemens.Automation.Diagnostics.PlugIn.dll'[\]]/@Type"
                      SelectionLanguage="XPath" Permanent="yes" Value="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SIPLACE\$(var.ProductName)"/>

Но выдает ошибку, которая не может найти узел. Чего мне не хватает?

1 Ответ

0 голосов
/ 15 января 2019

В некоторых библиотеках XPath возникают проблемы, когда имена элементов содержат точку (".").

Учитывая обходной путь от этого ответа , вы должны заменить первую часть вашего XPath:

/Siemens.Automation.Diagnostics

от

/*[name(.)='Siemens.Automation.Diagnostics']

и с правильным экранированием для поля, отформатированного в MSI, ответ, наконец, таков:

/*[\[]name(.)='Siemens.Automation.Diagnostics'[\]]

Успешно вставляется в этот онлайн-тестер XPath .

...