簡體   English   中英

將 xml 轉換為 Powershell 中的 csv 文件

[英]Convert xml to csv file in Powershell

幾天前我才開始學習 Powershell,所以這對我來說是全新的。 問題是我需要盡快完成。 所以我有 2 個文件需要集成 - a.csv 和 a.xml。 我的想法是轉換其中一個,以便我首先擁有 2 個格式相同的文件。 我讀到了。csv 文件更易於使用,因此決定將.xml 文件轉換為.csv。 但是,我嘗試過的一切都失敗了。 但我也找不到與我的類似的.xml 文件的示例。 我的文件看起來像這樣(一些 id 是空的):

<Objects>
<Object>
<Property Name="id"/>
<Property Name="username">JLOCK0</Property>
<Property Name="phoneType">phone1</Property>
<Property Name="value">346-209-9609</Property>
</Object>
<Object>
<Property Name="id">vjWJem2qcU+cxPT2qIvqsw==</Property>
<Property Name="username">CSELWYN1</Property>
<Property Name="phoneType">phone1</Property>
<Property Name="value">562-981-5379</Property>
</Object>
</Objects>

我嘗試過的所有代碼要么只顯示 id、用戶名、phoneType 和不帶值的值,要么只顯示值。 向上或向下移動節點無濟於事。 我得到的最接近的是:

    [xml]$xml_file = Get-Content ".\phone.xml"
    $xml_file.ChildNodes.ChildNodes | ForEach-Object { $_.ChildNodes[1], $_.ChildNodes[0], $_.ChildNodes[2], 
$_.ChildNodes[3]}| ConvertTo-Csv | Out-File ".\phone.csv"

但是使用這段代碼,我只得到 2 個標題:名稱和#text。 用戶名、id、phoneType、值顯示在第一列,它們的值顯示在第二列。 下面的代碼只添加了標題:

[xml]$data = Get-Content ".\phone.xml"
$result = New-Object psobject -Property $props
$result | Add-Member NoteProperty "id" $data.SelectSingleNode("//Property").id
$result | Add-Member NoteProperty "username" $data.SelectSingleNode("//Property").username
$result | Add-Member NoteProperty "phoneType" $data.SelectSingleNode("//Property").phoneType
$result | Add-Member NoteProperty "value" $data.SelectSingleNode("//Property").value
$result | Export-Csv ".\newphone.csv" -Force -Delimiter ';' -Encoding utf8

可能有更好的方法,但現在這應該可以幫助您構建可以在以下之后轉換為 CSV 的object[]

$result = foreach($i in $xml.Objects.Object)
{
    $out = [ordered]@{}
    foreach($prop in $i.Property)
    {
        $out[$prop.Name] = $prop.'#text'
    }
    [pscustomobject]$out
}
  • $result
id                       username phoneType value
--                       -------- --------- -----
                         JLOCK0   phone1    346-209-9609
vjWJem2qcU+cxPT2qIvqsw== CSELWYN1 phone1    562-981-5379

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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