如何在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
相关产品推荐
相关产品推荐

