2014-03-02 2 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에 함수 저장 정의를 보여 주라고 말합니다. 내가 코드를 실행했을 때 결국 다음과 같은 결과가 나타납니다.

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

실제로 당신이 이런 식으로 마지막 줄을 변경하는 데 필요한 파일을 저장하려면 다음과 같이

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

:

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

나는 다음과 같은 문서에 함수를 해봤를 전화 코드 :

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

그리고 모든 파일 노드가 삭제되었습니다.

+0

젠장, 나는 어리 석다. :( –

관련 문제