PowerShell实现多级XML内容插入:批量添加dependency与prerequisite元素
PowerShell XML依赖节点批量插入方案
完整可运行代码
function Update-XmlDependencies { param( # 输入XML文件路径 [Parameter(Mandatory=$true)] [string]$InputXmlPath, # 输出XML文件路径 [Parameter(Mandatory=$true)] [string]$OutputXmlPath, # 需插入的dependencies子节点集合,每个元素为包含Id、Version属性的对象 [Parameter(Mandatory=$true)] [PSObject[]]$Dependencies, # 需插入的prerequisites子节点集合,每个元素为包含Id、Version属性的对象 [Parameter(Mandatory=$true)] [PSObject[]]$Prerequisites ) # 加载XML文件,指定UTF8编码避免乱码 $xmlContent = Get-Content -Path $InputXmlPath -Raw -Encoding UTF8 [xml]$xmlDoc = $xmlContent # 定位原始XML中已存在的父节点 $dependenciesParent = $xmlDoc.SelectSingleNode('//metadata/dependencies') $prerequisitesParent = $xmlDoc.SelectSingleNode('//metadata/prerequisites') # 批量插入dependencies子节点 foreach ($dep in $Dependencies) { $newDepNode = $xmlDoc.CreateNode('element', 'dependency', '') $newDepNode.SetAttribute('id', $dep.Id) $newDepNode.SetAttribute('version', $dep.Version) $dependenciesParent.AppendChild($newDepNode) | Out-Null } # 批量插入prerequisites子节点 foreach ($pre in $Prerequisites) { $newPreNode = $xmlDoc.CreateNode('element', 'dependency', '') $newPreNode.SetAttribute('id', $pre.Id) $newPreNode.SetAttribute('version', $pre.Version) $prerequisitesParent.AppendChild($newPreNode) | Out-Null } # 保存处理后的XML $outputFullPath = (Resolve-Path -Path $OutputXmlPath -ErrorAction SilentlyContinue).Path ?? (New-Item -Path $OutputXmlPath -ItemType File -Force).FullName $xmlDoc.Save($outputFullPath) }
调用示例(匹配你提供的参数集)
# 构造dependency参数集 $depList = @( @{ Id = 'GGG'; Version = 'HHH' }, @{ Id = 'III'; Version = 'JJJ' }, @{ Id = 'KKK'; Version = 'LLL' } ) # 构造prerequisite参数集 $preList = @( @{ Id = 'UUU'; Version = 'VVV' }, @{ Id = 'WWW'; Version = 'XXX' } ) # 执行更新 Update-XmlDependencies -InputXmlPath "D:\TEMP\INPUT.xml" -OutputXmlPath "D:\TEMP\OUTPUT.xml" -Dependencies $depList -Prerequisites $preList
关键说明
- 严格匹配XML节点大小写,避免生成重复的错误命名节点
- 直接复用原始XML中已存在的
dependencies、prerequisites空节点,无需重复创建父节点 - 支持任意数量的子节点插入,仅需对应修改传入的参数数组即可
- 自动处理输出路径,输出文件不存在时会自动创建
内容的提问来源于stack exchange,提问作者neuvidor
相关产品推荐
相关产品推荐

