xml - 在 Powershell 中将 xml 转换为 csv 文件

标签 xml powershell csv type-conversion

我几天前才开始学习 Powershell,所以这对我来说是全新的。问题是我需要尽快完成这件事。 所以我有 2 个需要集成的文件 - .csv 和 .xml。我的想法是转换其中一个,这样我首先会有两个相同格式的文件。我了解到 .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 个 header :Name 和 #text。用户名、id、电话类型、值显示在第一列中,它们的值显示在第二列中。 下面的代码仅添加标题:

[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

最佳答案

可能有更好的方法,但目前这应该可以帮助您构建 object[] ,之后可以将其转换为 CSV:

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

关于xml - 在 Powershell 中将 xml 转换为 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70442725/

相关文章:

以特定方式将 PHP CSV 转换为数组

javascript - 从 xml 文件创建 html5 播放列表

powershell - 管道语义不会传播到 Where-Object

javascript - 解析 Highcharts 中多个类别的 CSV

powershell - 在哪里可以找到 Convert-VHD PowerShell 命令

c# - 配置 MSBuild 以启动 PowerShell 并运行 Import-Module $(TargetFileName)

shell - 从unix中的内部列中删除csv文件中的新行字符

sql-server - 操作 XML 命名空间

java - XML 或 XUL 是 Java GUI 构建的 future 吗?

php - 如何使用 file_get_contents 和 expedia XML API 修复 411 Length Required 错误?