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

如何在PowerShell中筛选嵌套master标签值为New的XML节点

正确实现代码

你需要逐一遍历所有foo节点,先按master值筛选,再取对应节点下的val1,写法如下:

# 筛选master为New的foo节点,提取对应val1值
$xml.xml.foo | Where-Object { $_.master -eq 'New' } | ForEach-Object { $_.data.val1 }

如果不需要额外遍历处理直接拿值,也可以简化成:

($xml.xml.foo | Where-Object master -eq 'New').data.val1

原写法错误原因

  1. 之前的Where-Object后用了括号而非脚本块{},且提前取出了val1值,丢失了和上层master标签的关联关系,无法完成匹配筛选
  2. 直接判断$xml.xml.foo.master -eq "New"会返回所有foo节点的master值与字符串比较的布尔数组,不能实现逐节点判断的效果

可选:未闭合标签兼容加载方案

你提到文件偶尔存在未闭合标签,直接用[xml]强转也可能出现解析失败,可以改用宽松的XML加载方式,提升兼容性:

$xmlSettings = [System.Xml.XmlReaderSettings]::new()
# 调整兼容级别,允许非完整XML结构
$xmlSettings.ConformanceLevel = [System.Xml.ConformanceLevel]::Fragment
$xmlReader = [System.Xml.XmlReader]::Create($file, $xmlSettings)
$xml = [System.Xml.XmlDocument]::new()
$xml.Load($xmlReader)
$xmlReader.Dispose()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:57:01