Я автоматизирую сравнение XML с помощью Powershell (4.0). Я нахожу проблему в XML-модификации. Мы должны взять производственный XML и реплицировать его в нерабочее. Некоторые значения узлов различны, поэтому мы не можем скопировать вставку. Ниже приведен пример XML-секции.XML-модификация в Powershell
Я должен сравнить раздел имена обоих файлов и внесите изменения в файл производства. Ниже мой код.
$live_web_config = "\dummy path\web.config"
$int_web_config = "\Script_test\web.config"
$live_xml = New-Object -TypeName XML
$int_xml = New-Object -TypeName XML
$live_xml.Load($live_web_config)
$int_xml.Load($int_web_config)
foreach ($sec in $live_xml.configuration.configSections.section.name)
{
$node = $int_xml.configuration.configSections.section | where {$_.name -imatch $sec }
if ($node)
{
continue
}
else
{
#write-host $sec "not found in int"
$add_node = $int_xml.importnode("section")
write-host $sec
$add_node = $live_xml.configuration.configSections.section | where {$_.name -eq $sec }
$int_xml.appendchild($add_node)
$int_xml.save($int_web_config)
}
}
Этот код возвращает мне следующую ошибку:
You cannot call a method on a null-valued expression.
At C:\Users\vijay.patel\myscripts\file_copy.ps1:86 char:3
+ $int_xml.section.appendchild($add_node)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Что я здесь делаю неправильно?
Вы можете предоставить полный сценарий? Мне не хватает определения $ add_node –
Да, я пропустил это. '$ Add_node = $ int_xml.importnode (" section ")' – catchvjay
Строка в этом сообщении об ошибке не отображается нигде в предоставленном фрагменте. Есть ли еще код, который вы нам не дали? –