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

PowerShell如何获取深层XML中field_name=Test2且id=3的对应值

问题原因

原有代码失效主要有三个原因:

  1. 没有先过滤field_name属性为Test2的<Type>父节点,会匹配所有<Type>下符合id=3的节点,无法精准定位到Test2分组下的内容
  2. 部分PowerShell版本对XML节点名称大小写敏感,原有代码写的$xml.types对应根节点名是大写<Types>,可能导致节点读取为空
  3. XML中读取的id值默认是字符串类型,直接和数字3做相等比较可能出现类型不匹配的问题

正确实现方案

方案1:沿用PowerShell对象筛选写法

和你原有写法逻辑接近,适配修正后代码如下:

# 加载XML文件,指定编码避免乱码
$xml = [xml](Get-Content "C:\Test.xml" -Encoding UTF8)
# 先筛选Test2分组,再匹配id=3的节点取value
$targetValue = $xml.Types.Type | Where-Object { $_.field_name -eq 'Test2' } | 
    Select-Object -ExpandProperty items | 
    Select-Object -ExpandProperty item | 
    Where-Object { [int]$_.id -eq 3 } | 
    Select-Object -ExpandProperty value

# 输出结果:C
$targetValue

方案2:使用XPath查询(更简洁高效)

直接通过XPath语法定位目标节点,代码更短,查询效率更高:

$xml = [xml](Get-Content "C:\Test.xml" -Encoding UTF8)
$targetValue = $xml.SelectSingleNode('//Type[@field_name="Test2"]/items/item[id="3"]/value').InnerText

# 输出结果:C
$targetValue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:12:03