簡體   English   中英

報告 PowerShell 中的 XML 節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM