2014-10-17 2 views
2
<?xml version="1.0" encoding="UTF-8"?> 
    <People xmlns="TestData"> 
     <Person Id="TestData" Status="TestData"> 
     <Name> 
      <FirstName>TestData</FirstName> 
      <LastName>TestData</LastName> 
     </Name> 
     <Dimensions> 
      <Dimension Id="TestData" Name="TestData" Dimension="TestData" /> 
      <Dimension Id="TestData" Name="TestData" Dimension="TestData" /> 
      <Dimension Id="TestData" Name="TestData" Dimension="TestData" /> 
      <Dimension Id="TestData" Name="TestData" Dimension="TestData"/> 
     </Dimensions> 
     <EmploymentInformation> 
      <DateHired>TestData</DateHired> 
      <DateRehired>TestData</DateRehired> 
      <EmployeeStatus>TestData</EmployeeStatus> 
      <JobCode>TestData</JobCode> 
      <Supervisor Id="TestData" Name="TestData" /> 
      <Title>TestData</Title> 
     </EmploymentInformation> 
     </Person> 
    </People> 

내 XML 문서는 위에 있습니다. 'EmploymentInformation'아래의 'Supervisor'노드를 제거하고 싶습니다. 내가 함께 내 XPath를 넣어 몇 가지 문제가 있어요 ... 이것은 내가 지금까지 무엇을 가지고 :Powershell을 사용하여 노드 삭제

[xml]$xml = gc C:\Users\username\Downloads\Test.xml 

$supervisor = $xml.SelectSingleNode('//People/Person/EmploymentInformation/Supervisor') 
$employmentInformation = $xml.SelectSingleNode('//People/Person/EmploymentInformation') 
[void]$employmentInformation.RemoveChild($supervisor) 
$xml.Save('C:\Users\username\Downloads\Result.xml') 

답변

0

하이 네임 스페이스가 XML 문서에 정의하지만 XPath를 필요하지 않은 있습니다. 같은를 수행

[xml]$xml = gc C:\Users\username\Downloads\Test.xml 

$mgr = New-Object -TypeName System.Xml.XmlNamespaceManager -ArgumentList $xml.NameTable 
$mgr.AddNamespace("bob","TestData") 

$supervisor = $xml.SelectSingleNode('//bob:People/bob:Person/bob:EmploymentInformation/bob:Supervisor', $mgr) 
$employmentInformation = $xml.SelectSingleNode('//bob:People/bob:Person/bob:EmploymentInformation', $mgr) 
[void]$employmentInformation.RemoveChild($supervisor) 
$xml.Save('C:\Users\username\Downloads\Result.xml') 

그런 다음 여러 사람이 작업을 수행 할 경우, 그것을해야 다음

[xml]$xml = gc .\Test.xml 

$mgr = New-Object -TypeName System.Xml.XmlNamespaceManager -ArgumentList $xml.NameTable 
$mgr.AddNamespace("bob","TestData") 

$supervisors = $xml.SelectNodes('//bob:People/bob:Person/bob:EmploymentInformation/bob:Supervisor', $mgr) 

foreach ($supervisor in $supervisors) 
{ 
     $supervisor.ParentNode.RemoveChild($supervisor) 
} 

$xml.Save('.\Result.xml') 

을하거나 XML을위한 파워 쉘의 내장 지원을 사용할 수 있습니다

[xml]$xml = gc .\Test.xml 

foreach ($supervisor in $xml.People.Person.EmploymentInformation.Supervisor) 
{ 
     $supervisor.ParentNode.RemoveChild($supervisor) 
} 

$xml.Save('.\Result.xml') 
+0

위의 코드를 XML 문서 네임 스페이스가 xmlns = "tnw : grc : import : people"에서 xmlns = "TestData"로 업데이트되었습니다. – DanL

+0

Dan 감사합니다! 이것은 훌륭하게 작동했지만 첫 번째 Person에서 관리자를 삭제하는 것만 알았습니다 ... 위의 XML 문서에는 포함되지 않았지만이 노드를 제거하려는 사람이 여러 명 있습니다. – mpalatsi