Xml 使用Powershell删除节点
您好,您在XML文档上定义了名称空间,但没有限定XPath。执行以下操作:Xml 使用Powershell删除节点,xml,powershell,xpath,Xml,Powershell,Xpath,您好,您在XML文档上定义了名称空间,但没有限定XPath。执行以下操作: [xml]$xml = gc C:\Users\username\Downloads\Test.xml $supervisor = $xml.SelectSingleNode('//People/Person/EmploymentInformation/Supervisor') $employmentInformation = $xml.SelectSingleNode('//People/Person/Employm
[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')
如果您希望与多人一起执行此操作,则应执行以下操作:
[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')
也可以使用Powershell对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文档名称空间从xmlns=“tnw:grc:import:people”更新到xmlns=“TestData”时,我更新了上面的代码。谢谢Dan!这很有效,但我注意到这只是从第一人称中删除了主管。。。我没有将其包含在上面的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 = gc .\Test.xml
foreach ($supervisor in $xml.People.Person.EmploymentInformation.Supervisor)
{
$supervisor.ParentNode.RemoveChild($supervisor)
}
$xml.Save('.\Result.xml')