在PowerShell中替换XML节点
发布时间:2020-12-16 23:36:14 所属栏目:百科 来源:网络整理
导读:我有两个 XML文件(File1.xml,File2.xml). File2.xml是File1.xml的子集. File1.xml有这样的节点: parentnode item id="GUID1" TextSome Text/Text /item item id="GUID2" TextHere’s some more text/Text /item/parentnode File2.xml有: parentnode item i
我有两个
XML文件(File1.xml,File2.xml). File2.xml是File1.xml的子集.
File1.xml有这样的节点: <parentnode> <item id="GUID1"> <Text>Some Text</Text> </item> <item id="GUID2"> <Text>Here’s some more text</Text> </item> </parentnode> File2.xml有: <parentnode> <item id="GUID1"> <Text>Some Replacement Text</Text> </item> </parentnode> 我想在File1.xml中使用带有GUIDx的项目,并将其替换为来自File2.xml的GUIDx项目.本质上,我想在File2.xml中获取替换文本并将其插入File1.xml中的相应项目节点 我如何在PowerShell中执行此操作? 解决方法
假设我在变量$edited中有第一个xml,在$new中有第二个.然后,您可以通过ID更改ID为GUID1的项目中的值
$edited.parentnode.item | ? { $_.id -eq 'guid1' } | % { $_.Text = $new.parentnode.item.Text } # and save the file $edited.Save('d:File1.xml') # see the changes gc d:File1.xml 如果您有更多要替换的项目,可以使用嵌套管道: $edited = [xml]@" <parentnode> <item id="GUID1"><Text>Some Text</Text></item> <item id="GUID2"><Text>Here’s some more text</Text></item> <item id="GUID3"><Text>Here’s some more text</Text></item> <item id="GUID10"><Text>Here’s some more text</Text></item> </parentnode> "@ $new = [xml] @" <parentnode> <item id="GUID1"><Text>new Guid1</Text></item> <item id="GUID2"><Text>new Guid2</Text></item> <item id="GUID3"><Text>new Guid3</Text></item> <item id="GUID4"><Text>new Guid4</Text></item> <item id="GUID5"><Text>new Guid5</Text></item> </parentnode> "@ $new.parentnode.item | % {,($_.id,$_.Text)} | % { $id,$text = $_; $edited.parentnode.item | ? { $_.id -eq $id } | % { $_.Text = $text } } 或foreach循环,这里更具可读性: foreach($i in $new.parentnode.item) { $edited.parentnode.item | ? { $_.id -eq $i.Id } | % { $_.Text = $i.Text } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |