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

如何使用PowerShell遍历XML的Values节点并过滤特定前缀的键?

问题:过滤并遍历XML中特定前缀的节点

给定如下XML内容:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<FlowInstance xmlns="http://www.oeplatform.org/version/2.0/schemas/flowinstance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oeplatform.org/version/2.0/schemas/flowinstance schema-1161.xsd">
    <Values>
        <donotoutput>
            <Name><![CDATA[donotoutput]]></Name>
            <Value><![CDATA[donotoutput value]]></Value>
        </donotoutput>
        <specifics_test1>
            <Name><![CDATA[Test1]]></Name>
            <Value>Val1</Value>
            <Value>Val2</Value>
            <Value>Val3</Value>
        </specifics_test1>
        <specifics_test2>
            <Name><![CDATA[Test2]]></Name>
            <Value><![CDATA[Test2 value]]></Value>
        </specifics_test2>
        <specifics_test3>
            <Name><![CDATA[Test3]]></Name>
            <Value><![CDATA[Test3 value]]></Value>
        </specifics_test3>
    </Values>
</FlowInstance>

需要遍历<Values>部分,仅处理标签名以specifics_开头的节点。尝试直接遍历$xml.FlowInstance.Values无法得到预期结果,也无法像哈希表那样用.Keys过滤节点。


解决方案

核心思路

$xml.FlowInstance.Values是单个XmlElement对象,而非子节点集合,因此直接遍历它只会输出对象本身。需要通过ChildNodes属性获取<Values>下的所有子节点,再过滤标签名符合前缀要求的节点。

实现代码

[xml]$xml = Get-Content -Path "C:\Temp\xml\xml_cleaned.xml"

# 过滤出<Values>下标签名以specifics_开头的子节点
$targetNodes = $xml.FlowInstance.Values.ChildNodes | Where-Object { $_.Name -like 'specifics_*' }

# 遍历处理每个符合条件的节点
foreach ($node in $targetNodes) {
    # 获取节点的Name文本
    $nodeDisplayName = $node.Name.InnerText
    # 获取所有Value文本(支持多Value节点)
    $nodeValues = $node.Value | ForEach-Object { $_.InnerText }

    Write-Host "节点标签名: $($node.Name)"
    Write-Host "显示名称: $nodeDisplayName"
    Write-Host "对应值: $($nodeValues -join ', ')"
    Write-Host "-------------------------"
}

代码说明

  1. 获取子节点:通过ChildNodes属性拿到<Values>下的所有子元素,包括<donotoutput>、<specifics_test1>等。
  2. 过滤节点:用Where-Object筛选标签名($_.Name)匹配specifics_*的节点。
  3. 提取内容:每个目标节点下的<Name>和<Value>可以直接通过节点属性访问,多<Value>节点会自动形成集合,用-join可以合并成字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:53