【发布时间】:2021-05-14 16:29:28
【问题描述】:
我需要向 XML 中的现有节点添加一个新元素。目前的结构基本上是这样的:
<CommandManagerResults>
<ListReports>
<Row>
<Name>aaa</Name>
</Row>
<Row>
<Name>bbb</Name>
</Row>
</ListReports>
<ListDocuments>
<Row>
<Name>ccc</Name>
</Row>
<Row>
<Name>ddd</Name>
</Row>
</ListDocuments>
</CommandManagerResults>
我需要在所有“行”节点中添加一个元素。我到目前为止的代码:
$directory = "E:\temp"
cd $directory
[xml]$XmlDocument = Get-Content ".\test.xml"
$ProjectName = $XmlDocument.CreateElement("ProjectName")
$ProjectName.InnerText = "test"
$temp = $XmlDocument.SelectNodes("//Row")
foreach ($row in $temp){
$row.AppendChild($ProjectName)
$XmlDocument.Save($directory + '\test.xml')
}
但是,只有最后一个“行”节点与新的“项目名称”元素一起保存。我添加了'$row | FL' 在 foreach 循环中,它显示每个 Row 在循环的每次迭代中都存在 ProjectName 元素,不幸的是,无论我是在 foreach 循环内部还是在 foreach 循环之后保存,只有最后一个 Row 节点与 ProjectName 元素一起保存。结果如何:
<CommandManagerResults>
<ListReports>
<Row>
<Name>aaa</Name>
</Row>
<Row>
<Name>bbb</Name>
</Row>
</ListReports>
<ListDocuments>
<Row>
<Name>ccc</Name>
</Row>
<Row>
<Name>ddd</Name>
<ProjectName>Test</ProjectName>
</Row>
</ListDocuments>
</CommandManagerResults>
我希望结构最终看起来像什么:
<CommandManagerResults>
<ListReports>
<Row>
<Name>aaa</Name>
<ProjectName>Test</ProjectName>
</Row>
<Row>
<Name>bbb</Name>
<ProjectName>Test</ProjectName>
</Row>
</ListReports>
<ListDocuments>
<Row>
<Name>ccc</Name>
<ProjectName>Test</ProjectName>
</Row>
<Row>
<Name>ddd</Name>
<ProjectName>Test</ProjectName>
</Row>
</ListDocuments>
</CommandManagerResults>
仅供参考,对 Powershell 和 XML 来说非常陌生,所以希望我所说的一切都有意义,并且至少我正朝着正确的方向前进。
【问题讨论】:
-
为此最好使用 XSLT
标签: xml powershell foreach