You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:07:03