首页 > 解决方案 > 在 PowerShell 中报告 XML 节点

问题描述

我想要遍历一组 XML,然后将它们传递给可以打印的变量。

以下是数据示例:

<applications>
 <size>75</size>
 <application>
    <name>Applications 1</name>
    <path>/Applications/Utilities/Application 1</path>
    <version>10.14</version>
 </application>
 <application>
    <name>Application 2</name>
    <path>/Applications/Utilities/Application 2</path>
    <version>6.3.9</version>
 </application>
</applications>

我在尝试输出它时看过使用ForEach-Object,但无济于事。

[string]$applicationProperties = $API.applications.application | ForEach-Object {
   $_.name
   $_.path
   $_.version
}

这可行,但将它们全部放在一行上,我希望它们打印在单独的行上,但我无法为$_变量添加前缀。

例如,我想将名称/路径/版本数据保存到变量中

[string]$applicationProperties = $API.applications.application | ForEach-Object {
   [string]$name_var = $_.name 
   [string]$path_var = $_.path
   [string]$version_var = $_.variable
}

这给了我一个“应用程序”,但不是所有可能的对象。还提到即使我放下$name_var它也没有访问该变量?我需要做些什么来访问该变量吗?


创建了这个$applicationProperties = "Application Name $($applicationProperties[0].name)"

$applicationProperties但是当我打电话时Missing '=' operator after key in hash literal.

标签: xmlpowershellapiforeach

解决方案


使用XPathSelectNodes()表达式而不是点访问,然后输出每个选定节点的名称和内部文本:

$API.SelectNodes('//application/*') | ForEach-Object {
    '{0}={1}' -f $_.Name, $_.InnerText
} | Set-Content 'output.txt'

推荐阅读