2014-03-02 19 views
0

以下函數「有效」,因爲不會引發異常並將xml文檔保存到磁盤。然而,沒有我刪除節點實際上從文件中刪除:XmlNode.RemoveChild在Powershell中沒有效果

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

我認爲問題在於,不是實際保存文件,而是告訴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" 

它刪除了所有的文件節點。

+0

該死的我覺得很蠢。 :( –