XmlNode.RemoveChild在Powershell中无效
以下函数“起作用”的原因是不会引发异常,并且xml文档会保存到磁盘。但是,我删除的所有节点实际上都没有从文档中删除: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) {
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"