以下函数“有效”,因为不会引发异常并且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
}
我一直在敲打这个问题好几个小时。请帮忙!
答案 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"
它删除了所有文件节点。