【发布时间】:2020-05-15 07:13:30
【问题描述】:
我正在尝试在 XML 文档中搜索属性字段中具有特定字符串的条目。如果该字符串存在,我想将整个元素复制到另一个具有相同结构的 xml。
到目前为止,我能够找到元素并将它们保存到数组中。我在将每个文件保存到 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>
当前代码用于查找 SProperty1.xml 中 Name 属性包含“C_ITEM”的所有 SProperty 实例。然后将其所有条目添加到 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)
}
当 for 循环过程由于某种原因我得到以下输出时:
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
任何帮助将不胜感激
【问题讨论】:
-
如果您可以显示在这种情况下您期望的输出,问题可能会得到改善?就像一个部分说我希望输出看起来像这样:EXPECTED OUTPUT的示例代码
标签: arrays xml powershell copy