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

如何在PowerShell中遍历并分离System.Xml.XmlLinkedNode独立节点

在PowerShell中遍历XML的Settings子节点

针对你遇到的问题,以下几种方法可以帮你将Settings下的SomeSetting和AnotherSetting单独提取为数组并遍历:

方法1:使用SelectNodes()直接选取子元素

这是最直接的方式,通过XPath表达式选取Settings下的所有子元素节点:

# 加载XML(若未加载)
$XML = [xml](Get-Content -Path "你的XML文件路径.xml")

# 获取Settings下的所有子元素节点
$settingsNodes = $XML.Test.Settings.SelectNodes("*")

# 遍历节点
foreach ($node in $settingsNodes) {
    Write-Host "当前节点:$($node.Name)"
    # 示例:获取节点下的子元素值
    if ($node.Name -eq "SomeSetting") {
        Write-Host "AAA值:$($node.AAA.InnerText)"
        Write-Host "BBB值:$($node.BBB.InnerText)"
    } elseif ($node.Name -eq "AnotherSetting") {
        Write-Host "CCC值:$($node.CCC.InnerText)"
        Write-Host "DDD值:$($node.DDD.InnerText)"
    }
}

方法2:过滤ChildNodes中的元素节点

XML的ChildNodes会包含文本节点(换行、缩进等空白字符),只需过滤出元素类型的节点即可:

$settingsNodes = $XML.Test.Settings.ChildNodes | Where-Object { $_.NodeType -eq "Element" }

# 遍历验证
foreach ($node in $settingsNodes) {
    Write-Host "节点名称:$($node.Name)"
}

方法3:强制转换为数组(适合节点属性明确的场景)

当PowerShell将单个节点作为属性而非数组返回时,可通过@()强制包裹并提取属性对应的节点:

# 获取Settings下所有XmlElement类型的属性
$nodeNames = $XML.Test.Settings | Get-Member -MemberType Property | Where-Object { $_.Definition -match "System.Xml.XmlElement" } | Select-Object -ExpandProperty Name

# 转换为节点数组
$settingsNodes = @($nodeNames | ForEach-Object { $XML.Test.Settings.$_ })

以上方法都能得到包含SomeSetting和AnotherSetting的数组,可直接遍历处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:15:27