Я не уверен, где 'я иду здесь не так. У меня следующее сообщение об ошибке PowerShell:
Exception setting "Value": "Cannot set a value on node type
'Document'." At line:18 char:5
+ $XMLDoc.$controlSource='$replaceText'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterSetValue
Мой код следующий:
[xml]$XMLDoc = (Get-Content "C:\process.xml")
foreach($file in Get-ChildItem $outputDirectory) {
$replaceText = <tested working string of the value to replace in the XML doc>
$controlSource = $XMLDoc.SelectNodes("/beans/bean[@id='$bNode']/property[@name='configOverrideMap']/map/entry[@key='sfdc.extractionSOQL']/@value")
$XMLDoc.$controlSource = '$replaceText'
#$XMLDoc -replace ('^"$controlSource"$','^"$replaceText"$') | Out-File $XMLDoc
}
Я пытаюсь заменить значение в XML-файле строкой и записать содержимое переменной $XMLDoc
в файл C:\process.xml
, пока не получу указанное выше сообщение. Я могу получить часть о записи $XMLDoc
в файл, проблема в том, что я все еще не могу заставить мою строку заменить переменную и сохранить. Я понимаю, что это может быть неаккуратно, потому что я выполняю одну и ту же задачу несколько раз в цикле foreach
, но в данный момент я стремлюсь к функциональности, а не к оптимальной.
<beans>
<bean id="MenuGet">
<property name="name" />
<property name="MapOverride">
<map>
<entry key="node.infoblock" value="k4jk2jb54B$T45bt2j5ktb3B%$" />
</map>
</property>
</bean>
<bean id="SystemGet">
<property name="name" />
<property name="MapOverride">
<map>
<entry key="node.infoblock" value="b34t34bhj54b%B#Y$%Bn45ht5h" />
</map>
</property>
</bean>
</beans>