XML将新子项添加到数组节点的每个元素子项

时间:2017-12-06 21:47:58

标签: arrays xml powershell

我的xml看起来像这样:

test_utils

我需要用一个新的子节点填充每个<ArrayOfConfig> <Config> <!--stuff--> </Config> <Config> <!--stuff--> </Config> </ArrayOfConfig> 节点,使其看起来像:

Config

我已尝试运行以下Powershell:

<ArrayOfConfig>
    <Config>
        <!--stuff-->
        <NewChild>foo</NewChild>
    </Config>
    <Config>
        <!--stuff-->
        <NewChild>foo</NewChild>
    </Config>
</ArrayOfConfig>

运行此类工作,它只将子节点添加到第二个配置。例如:

$doc = New-Object System.Xml.XmlDocument
$doc.Load('C:\temp\Configs.xml')
$child = $doc.CreateElement("NewChild")
$child.InnerText = "foo"
$doc.ArrayOfConfig.Config.AppendChild($child)
$doc.Save('C:\temp\Configs.xml')

<ArrayOfConfig> <Config> <!--stuff--> </Config> <Config> <!--stuff--> <NewChild>foo</NewChild> </Config> </ArrayOfConfig> 的{​​{1}}子节点数量不尽相同,因此我无法进行任何静态分配。如何迭代Config的子项并确保每个子项正确获取新的子节点?

1 个答案:

答案 0 :(得分:1)

$doc = New-Object System.Xml.XmlDocument
$doc.Load('C:\temp\Configs.xml')
foreach($config in $doc.SelectNodes('//Config'))
{
    $child = $doc.CreateElement("NewChild")
    $child.InnerText = "foo"
    $config.AppendChild($child)
}
$doc.Save('C:\temp\Configs.xml')