xml - 如何使用 PowerShell 2.0 将此 XML 转换为 CSV?

标签 xml powershell csv

我正在尝试使用 PowerShell 2.0 将以下 XML 转换为 CSV,我可以获取一些数据,但是当尝试通过 XML 对象时,我似乎无法仅以允许我的格式获取数据做一张好 table 。

我所拥有的是这样的,有多个项目

  • <root type="array">   
      <item type="object">
        <short_version type="string">11</short_version>
        <long_name type="string">Internet Explorer</long_name>
        <api_name type="string">internet explorer</api_name>
        <long_version type="string">11.0.9600.16384.</long_version>
        <latest_stable_version type="string"></latest_stable_version>
        <automation_backend type="string">webdriver</automation_backend>
        <os type="string">Windows 2012 R2</os>
      </item>
      ... 
    </root>
    

  • 要么我以 Type 结束,要么如果我尝试访问 InnerHTML,我只会得到值,但在一个长字符串中。

    我到目前为止:
    [xml]$convertMe = Get-Content $jsonTemp
    $convertMe.SelectNodes("//item") | % { $_.InnerText }
    

    我怎样才能得到一个很好的 CSV 格式,如:

    short_version,long_name,api_name,long_version,latest_stable_version,automation_backend,os 11,Internet Explorer,internet explorer,11.0.9600.16384,,webdriver,Windows 2012 R2

    最佳答案

    这是一个硬编码且冗长的解决方案,但它确实有效。 :) 尝试:

    $xml = [xml](Get-Content .\test.xml)
    
    $xml.root.item | Select-Object @(
    @{l="short_version";e={$_.short_version."#text"}},
    @{l="long_name";e={$_.long_name."#text"}},
    @{l="api_name";e={$_.api_name."#text"}},
    @{l="long_version";e={$_.long_version."#text"}},
    @{l="latest_stable_version";e={$_.latest_stable_version."#text"}},
    @{l="automation_backend";e={$_.automation_backend."#text"}},
    @{l="os";e={$_.os."#text"}}) |
    Export-Csv test.csv -NoTypeInformation
    

    测试.csv
    "short_version","long_name","api_name","long_version","latest_stable_version","automation_backend","os"
    "11","Internet Explorer","internet explorer","11.0.9600.16384.",,"webdriver","Windows 2012 R2"
    

    以及替代且可能较慢的解决方案:
    $xml = [xml](Get-Content .\test.xml)
    
    #Foreach item
    $xml.root.item | ForEach-Object {
        $obj = New-Object psobject
        $_.GetEnumerator() | ForEach-Object {
            #Get all properties/elements and values
            $obj | Add-Member -MemberType NoteProperty -Name $_.Name -Value $_.InnerText
        }
        $obj
    } |
    #Set property order. This also makes sure that all items exports the same properties(which a csv needs)
    Select-Object short_version,long_name,api_name,long_version,latest_stable_version,automation_backend,os |
    #Export to csv
    Export-Csv test.csv -NoTypeInformation
    

    关于xml - 如何使用 PowerShell 2.0 将此 XML 转换为 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409270/

    相关文章:

    java - 如何与包含多个 xml 的输入 xml 文件分开创建多个 xml 文件

    powershell - 如何使用 PowerShell 取消和删除队列中等待的构建

    PowerShell 和 Net.WebClient。需要澄清工作行为

    PowerShell 搜索文本并添加一行

    python - Pandas- ValueError : Usecols do not match columns, 列预期但未找到

    java - BitmapFactory:无法解码流: java. io.FileNotFoundException

    java - XML 节点和子节点

    java - 如何以方形对齐单选组项目

    php - 将数据从 CSV 文件插入数据库。只插入最后一行

    php - CSV导入-需要设置导入txt文件字符集