Я ищу решение, позволяющее копировать CDATA между XML файлами?
- Я открываю два XML файла (oldfile. xml & newfile. xml)
- Для каждого имени в старом файле. xml, обновите его значениями в новом файле. xml
- Сохраните обновление в oldfile.upd. xml.
В приведенном ниже сценарии все работает нормально, пока не будет предпринята попытка скопировать значение, содержащее CDATA.
Сбой из-за ошибки:
- Невозможно установить «значение», поскольку в качестве значений для установки свойств XmlNode могут использоваться только строки
Содержимое OldFile. xml:
<configuration>
<mainsect>
<subsect>
<setting name="Microsoft" retype="String">
<value>www.microsoft.com/old</value>
</setting>
<setting name="Apple" retype="String">
<value>www.apple.com/old</value>
</setting>
<setting name="Yahoo" retype="String">
<value>www.yahoo.com/older</value>
</setting>
<setting name="IBM" retype="String">
<value><![CDATA[https://www.ibm.net/old/mycontainer?sv=2020-03-28%3D]]></value>
</setting>
</subsect>
</mainsect>
</configuration>
Содержимое NewFile. xml
<configuration>
<mainsect>
<subsect>
<setting name="Microsoft" retype="String">
<value>https://www.microsoft.com/new</value>
</setting>
<setting name="Apple" retype="String">
<value>https://www.apple.com/new</value>
</setting>
<setting name="IBM" retype="String">
<value><![CDATA[https://www.ibm.net/new/mycontainer?sv=2018-03-28%3D]]></value>
</setting>
</subsect>
</mainsect>
</configuration>
Сценарий:
[XML] $oldObj = Get-Content "C:\temp\example\oldfile.xml"
[XML] $newObj = Get-Content "C:\temp\example\newfile.xml"
# ... Update old values with new values .....
$oldObj.configuration.mainsect.subsect.setting | % {
foreach($elem in $newObj.configuration.mainsect.subsect.setting)
{
if ($_.Name -eq $elem.Name) # found matching names, replace values
{
echo ("Updating {0}" -f $_.Name)
$_.retype = $elem.retype
$_.value = $elem.value # !! Throws when hits CDATA in IBM !!
break;
}
}
}
$oldObj.Save("C:\temp\example\oldfile.upd.xml")
Я пробовал используя $ _. value.InnerText и не мог заставить ReplaceChild () работать правильно, но это может быть просто моей неопытностью.
Буду признателен за любую помощь.