PowerShell中如何根据子节点值重命名XML父节点?
XML父节点重命名解决方法
XML节点的Name属性确实是只读的,没法直接修改,得通过创建新节点并替换原父节点的方式实现重命名。以下是修改后的PowerShell代码:
$path = 'C:\temp\test.xml' $xml = [xml](Get-Content -Path $path) # 选中所有outbound子节点 $paramnode = $xml.SelectNodes('//outbound') foreach($node in $paramnode){ $parentNode = $node.ParentNode # 根据子节点值确定新节点名称 $newNodeName = if($node.InnerText -eq '0') { 'outbound' } else { 'inbound' } # 创建新节点 $newNode = $xml.CreateElement($newNodeName) # 复制原父节点的所有属性到新节点 foreach($attr in $parentNode.Attributes){ $newNode.SetAttribute($attr.Name, $attr.Value) } # 复制原父节点的所有子节点到新节点(克隆节点避免移除原内容) foreach($child in $parentNode.ChildNodes){ $newNode.AppendChild($child.CloneNode($true)) | Out-Null } # 用新节点替换原父节点 $parentNode.ParentNode.ReplaceChild($newNode, $parentNode) | Out-Null } # 保存修改后的XML文件 $xml.Save($path)
关键步骤说明:
CreateElement: 根据目标名称创建新的XML节点- 复制属性:遍历原父节点的属性,逐个添加到新节点,保留原节点的属性信息
- 克隆子节点:用
CloneNode($true)递归克隆所有子节点(包括子节点的子节点),避免直接移动原节点导致的内容丢失 ReplaceChild: 让原父节点的上级节点用新节点替换掉旧的父节点,完成重命名操作
内容的提问来源于stack exchange,提问作者ltwally
相关产品推荐
相关产品推荐

