删除匹配特定属性值的节点

Removing Nodes matching a specific attribute value

我有 XML 类似的数据:

<objects>
  <object>
    <property name="a" />
    <property name="b" />
    <property name="hasErrors" />
    <property name="data" />
        <property/>
        <property/>
    </property>
  </object>
</objects>

在 PowerShell 中,如何删除具有属性 name 特定值的节点?更具体地说,我想删除名称为 "hasErrors" 和 "data".

的节点及其子节点(如果有)

这段代码应该对你有帮助,我正在使用 Xpath 来匹配条件:

[xml]$data = @"
<objects>
  <object>
    <property name="a" />
    <property name="b" />
    <property name="hasErrors" />
    <property name="data" />
        <property/>
        <property/>
  </object>
</objects>
"@

 $data.SelectNodes("//property[@name = 'data' or @name = 'hasErrors']") | % {$_.ParentNode.removechild($_) } | Out-Null
 #to view properties,the empty nodes aren't visible as no value is inside.You can confirm them with count or after saving
$data.objects.object.property
$data.Save("C:\yourpath\mydata.xml")