xml - 在 Powershell 中删除具有重复 XML 元素的节点
问题描述
我有一个看起来像这样的 xml:
myobjects>
<allobjects>
<object name="firstObject" username="usr" pass="pass" specialLine="E:\folder1\files for home /c /x /waitsecs 30 " default="Yes" binary="1"/>
<object name="secondObjec" username="usr1" pass="thispass" specialLine="E:\folder1\files for home /c /x /waitsecs 30 " default="no" binary="1" />
<object name="thirdObject" username="usr2" pass="pass1" specialLine="E:\folder1\files for home /c /x /waitsecs 40 " default="Yes" binary ="0" />
<object name="fourthObject" username="usr3" pass="pass3" specialLine="D:\folder1\files for office /c /x /waitsecs 50 " default="Yes" binary="1"/>
<object name="firstobject 1" username="usr4" pass="pass5" specialLine="E:\folder1\files for home /c /x /waitsecs 30 " default="Yes" binary="0"/>
</allobjects>
<myobjects
我想删除每个元素的值"binary="0"
,我可以使用以下方法轻松完成where-Object
:
[xml]$myfile = [xml](Get-content path_to_my_file)
$myfile.myobjects.allobjects.childNodes | where-object{$_.binary -eq 0} |foreach-Object{ do my deletion function}
我接下来要做的是删除specialLine
值相同的每个节点(每个完全相同的节点只保留一个节点specialLines
)。specialLines
我可以用这个变得独一无二$myfile.myobjects.allobjects.object.special | sort-object | get-Unique
而且我只是找不到删除节点并保留具有唯一特殊线的节点的方法。我试过这样的事情:
$myfile.myobjects.allobjects.childNodes | where-object{$myfile.myobjects.allobjects.object.special | sort-object | get-Unique`} |foreach-Object{ do my deletion function}
但我认为我遗漏了一些东西,或者我的处理方法是完全错误的。任何建议或帮助将不胜感激。
解决方案
您可以结合使用属性上的Group-ObjectspecialLine
和Select-Object的-Skip
参数来选择要删除的节点。
$nodesToRemove = $myfile.myobjects.allobjects.childnodes | Group-Object specialLine |
Foreach-Object { $_.Group | Select-Object -Skip 1 }
$nodesToRemove | Foreach-Object {
$myfile.myobjects.allobjects.RemoveChild($_)
}
这个想法是跳过每个组中的第一个对象(specialLine
值)。如果一个组是唯一的,则将跳过整个组。
推荐阅读
- javascript - 如何在javascript集中执行不区分大小写的查找?
- mql5 - 如何像在 Pine Script 中一样计算 ATR
- php - 未定义的属性:AppController.php 中的 ErrorController::$user
- scala - 如何将汇编向量转换为数据框?
- python - 如何聚合基于两列的计算平均值?
- azure - 将 Azure Blob 存储事件通知发送到另一个帐户上的事件中心
- jquery - 如何只将数据存储到变量中一次?
- java - 反序列化json字符串的反序列化异常
- regex - 使用正则表达式从给定单词中提取文本直到段落结尾
- python - 为什么打印输出不同