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

如何使用PowerShell替换XML中含指定关键词节点的属性值

调整后可实现需求的完整代码
$filename = 'C:\path\to\my.xml'
# 定义需要匹配的name关键词列表
$targetKeywords = @('kden', 'lemd', 'yssy')

[xml]$xml = Get-Content $filename
# 筛选所有Package节点,匹配name属性包含指定关键词的节点
$xml.SelectNodes('//Package') |
    Where-Object {
        $nameAttr = $_.GetAttribute('name')
        # 检查name属性是否包含目标关键词中的任意一个
        $targetKeywords.Where({$nameAttr.Contains($_)}, 'First').Count -gt 0
    } |
    ForEach-Object {
        # 修改active属性值为false
        $_.SetAttribute('active', 'false')
    }
$xml.Save($filename)
原有代码问题说明
  • 节点选择逻辑错误:原有代码的XPath规则//*[self::title or self::subtitle]选择的是title、subtitle节点,和实际需要操作的Package节点完全不匹配
  • 修改对象错误:原有代码修改的是节点的文本内容(#text),而需求是修改节点的active属性,需要调用SetAttribute方法操作属性
  • 过滤规则错误:原有代码仅匹配文本内容为true的节点,没有增加name属性包含指定关键词的过滤逻辑
可选简化写法(直接用XPath过滤)

如果关键词固定,也可以用XPath直接做筛选,执行效率更高:

$filename = 'C:\path\to\my.xml'
[xml]$xml = Get-Content $filename
$xml.SelectNodes('//Package[contains(@name,"kden") or contains(@name,"lemd") or contains(@name,"yssy")]') |
    ForEach-Object { $_.SetAttribute('active', 'false') }
$xml.Save($filename)

内容的提问来源于stack exchange,提问作者kvari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:27:02