使用PowerShell删除XML节点

使用PowerShell删除XML节点,xml,powershell,powershell-5.1,Xml,Powershell,Powershell 5.1,我试图从下面的XML中删除SlowPollGroup在XML文件中有四个级别。我已经使用$markersExists=$vendor找到了作为$markersExists。选择SingleNode(“./Markers”)脚本 <Markers> <Element>Group2</Element> <Element>Group3</Element> <Element>Group4</Elem

我试图从下面的XML中删除
SlowPollGroup
<代码>在XML文件中有四个级别。我已经使用
$markersExists=$vendor找到了
作为$markersExists。选择SingleNode(“./Markers”)
脚本

  <Markers>
    <Element>Group2</Element>
    <Element>Group3</Element>
    <Element>Group4</Element>
    <Element>HWSimSubscription</Element>
    <Element>DIO_TC</Element>
    <Element>CmdSubGroup</Element>
    <Element>FastPollGroup</Element>
    <Element>SlowPollGroup</Element>
    <Element>HWSimPoll</Element>
    <Element>WriteOnly</Element>
  </Markers>
日志文件摘录如下所示:

Searching for Markers
Markers found
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
SlowPollGroup found
Removed => [SlowPollGroup]
但是,当我在Win10上的Windows PowerShell ISE中测试整个脚本时,输出如下所示:

Searching for Markers
Markers found
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
Searching for [SlowPollGroup] again
SlowPollGroup found
Removed => [SlowPollGroup]

我使用了以下代码:

        $groupsExists = $vendor.SelectSingleNode("./Groups")
        if ($null -ne $groupsExists) {
            LogWrite ("Groups found")
            foreach($element in $groupsExists.Element) {
                if ( $element.Name -eq $groupElemName) {
                    LogWrite ($groupElemName + " found")
                    $groupElemNameFound = $true
                    break
                }
                LogWrite ("Searching for " + $groupElemName + " again")
            }

            if ($groupElemNameFound) {
                $groupsExists.RemoveChild($element) | Out-Null
                LogWrite ("Removed => $groupElemName")
            }
        }
关于下面的XML

  <Groups>
    <Element>
      <Name>Group1</Name>
      <PollInterval>200</PollInterval>
      <UseDataSubscription>True</UseDataSubscription>
    </Element>
    <Element>
      <Name>AlarmGroup</Name>
      <PollInterval>1000</PollInterval>
    </Element>
    <Element>
      <Name>GVL_TC</Name>
      <PollInterval>100</PollInterval>
    </Element>
  </Groups>

第一组
200
真的
报警组
1000
GVL_TC
100
删除最后一个元素,即

    <Element>
      <Name>GVL_TC</Name>
      <PollInterval>100</PollInterval>
    </Element>

GVL_TC
100

它成功了。我理解这两种XML结构是不同的,我怀疑顶层脚本中的$element只包含“SlowPollGroup”,而不是
SlowPollGroup
。上周末,我一直在尝试谷歌搜索提供的各种脚本,但没有成功。非常感谢您的帮助。

显然,此脚本可以按照我的要求工作:

        LogWrite ("Searching for Markers")
        $markersExists = $vendor.SelectSingleNode("./Markers")
        if ($null -ne $markersExists) {
            LogWrite ("Markers found")

            # $delMarkerElem needs to be within ''
            $node = $markersExists.SelectSingleNode("./Element[.='$delMarkerElem']")

            if ($null -ne $node) {
                $node.ParentNode.RemoveChild($node)
                LogWrite ("Removed => Element node=[$node] with delMarkerElem=[$delMarkerElem]")
            }
            else {
                LogWrite ("Not found - Element node=[$node] with delMarkerElem=[$delMarkerElem]")
            }
        }
根据此脚本修改:

$node = $conns.SelectSingleNode("//Description[.='HP Command View EVA']")
while ($node -ne $null) {
    $node.ParentNode.RemoveChild($node)
    $node = $conns.SelectSingleNode("//Description[.='HP Command View EVA']")
}
发现于