[英]Reporting on XML nodes in PowerShell
我想遍歷一組 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>
我在嘗試 output 時查看過使用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.
使用SelectNodes()
和XPath表達式而不是點訪問,然后 output 每個選定節點的名稱和內部文本:
$API.SelectNodes('//application/*') | ForEach-Object {
'{0}={1}' -f $_.Name, $_.InnerText
} | Set-Content 'output.txt'
在這里試試這個。
[xml]$API =
@"
<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>
"@
$applicationProperties = $API.applications.application | ForEach-Object {
@"
Name = $($_.name)
Path = $($_.path)
Version = $($_.version)
"@
}
$applicationProperties | Out-File -FilePath C:\Output\appProps.txt
編輯
[xml]$API =
@"
<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>
"@
$applicationProperties = [System.Collections.ArrayList]@()
$API.applications.application | ForEach-Object {
$myObj = [PSCustomObject]@{
'Name' = $_.Name
'Path' = $_.Path
'Version' = $_.Version
}
#Adding objects to an array list prints the index each insert. Use null to suppress.
$null = $applicationProperties.Add($myObj)
}
要訪問變量,請在控制台中鍵入 $applicationProperties 並按 Enter。 它將打印該數組中的每個 object。 要在特定索引處訪問 object(數組從 0 開始) $applicationProperties[0] 用於第一項 $applicationProperties[1] 用於第二項,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.