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