Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XmlNode.RemoveChild在Powershell中无效_Xml_Powershell - Fatal编程技术网

XmlNode.RemoveChild在Powershell中无效

XmlNode.RemoveChild在Powershell中无效,xml,powershell,Xml,Powershell,以下函数“起作用”的原因是不会引发异常,并且xml文档会保存到磁盘。但是,我删除的所有节点实际上都没有从文档中删除: function RemoveInvalidFileNodes($file, $substring){ [xml]$xml = Get-Content $file $nodes=$xml.SelectNodes("//File") $substring = [regex]::Escape($substring) foreach ($node in $nodes) {

以下函数“起作用”的原因是不会引发异常,并且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 
}

这件事我已经忙了好几个小时了。请帮忙

我认为问题在于,不是实际保存文件,而是告诉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"