XmlNode.RemoveChild在Powershell中没有任何效果

时间:2014-03-02 00:05:59

标签: xml powershell

以下函数“有效”,因为不会引发异常并且xml文档将保存到磁盘。但是,我删除的节点实际上都没有从文档中删除:

function RemoveInvalidFileNodes($file, $substring){


[xml]$xml = Get-Content $file

$nodes=$xml.SelectNodes("//File")
$substring = [regex]::Escape($substring)

foreach ($node in $nodes) {


         if ($node.Name -match $substring) 

                {
                 $node.ParentNode.RemoveChild($node)
                }

}

Write-Host $xml.OuterXml

$xml.Save 
}

我一直在敲打这个问题好几个小时。请帮忙!

1 个答案:

答案 0 :(得分:0)

我认为问题在于,不是实际保存文件,而是告诉powershell向您展示函数save的定义。当我运行你的代码时,我最终得到了以下输出。

OverloadDefinitions                                                                                                                                                                  
-------------------                                                                                                                                                                  
void Save(string filename)                                                                                                                                                           
void Save(System.IO.Stream outStream)                                                                                                                                                
void Save(System.IO.TextWriter writer)                                                                                                                                               
void Save(System.Xml.XmlWriter w)   

要实际保存文件,您需要将最后一行更改为以下内容:

$xml.Save("C:\my2.xml")

我在以下文档中尝试了您的功能:

<?xml version="1.0" encoding="UTF-8"?>
<Files>
   <File Name="Hello" Surname="Zi" />
   <File Name="Hellow" Surname="Zi" />
</Files>

使用以下呼叫代码:

$ErrorActionPreference = "Stop"
RemoveInvalidFileNodes -file "C:\my.xml" -substring "Hello"

它删除了所有文件节点。