Я пытаюсь найти в документе XML записи с определенной строкой в поле атрибута. Если эта строка присутствует, я хочу скопировать весь элемент в другой xml с той же структурой.
Пока я могу найти элементы и сохранить их в массив. У меня возникают проблемы с сохранением каждого элемента foreach в XML.
Оба XML Структура файла:
> <?xml version="1.0" encoding="utf-8"?>
<ClassConfiguratorConfig
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Section>
> <SProperties>
> <SProperty Name="C_ITEM1VALUE" Value="1" />
> <SProperty Name="C_ITEM2VALUE" Value="5" />
> <SProperty Name="C_ITEM3VALUE" Value="20" />
> <SProperty Name="C_ITEM4VALUE" Value="100" />
> <SProperty Name="C_ITEM1TYPE" Value="0" />
> <SProperty Name="C_ITEM2TYPE" Value="0" />
> <SProperty Name="C_ITEM3TYPE" Value="0" />
> <SProperty Name="C_ITEM4TYPE" Value="0" />
> <SProperty Name="START_RETURNIMMEDIATELY" Value="FALSE" />
> <SProperty Name="SUPER_EXITTIMEOUT" Value="10" />
> </SProperties>
</Section>
</ClassConfiguratorConfig>
Текущий код для поиска всех экземпляров SProperty, где указан атрибут Name содержит "C_ITEM" в SProperty1. xml. Затем добавьте все записи этого в SProperty2. xml
[xml]$XML1 = Get-Content "C:\Temp\SProperty1.XML"
[xml]$XML2 = Get-Content "C:\Temp\SProperty2.XML"
$Node1 = $XML1.ClassConfiguratorConfig.Section.SProperties
$Node2 = $XML2.ClassConfiguratorConfig.Section.SProperties
$Nodes = $XML1.SelectNodes("//SProperties/*[@*[contains(.,'C_ITEM')]]")
foreach ($Node in $Nodes){
$XML2.CreateElement('SProperty')
$Child.SetAttribute('Name',"$Node.Name")
$Child.SetAttribute('Value',"$Node.Value")
$Node2.AppendChild($Child)
}
Когда для процесса l oop по какой-то причине я получаю ниже в качестве вывода:
Name Value
---- -----
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
System.Xml.XmlElement.Name System.Xml.XmlElement.Value
Любая помощь будет принята с благодарностью