将XML列导出/转换为excel csv中的列表格式

6tr1vspr  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(131)

有人能帮我把这个xml代码转换成一个列表格式与所需的领域?我甚至在努力想知道这是否可能。到目前为止,我还没有找到任何东西可以为我做到这一点。我希望这是可能的。
下面我有下面的XML代码:

<?xml version="1.0" encoding="utf-8"?>
<VShell Version="4.0">
  <VirtualRoots Type="subkey">
    <VirtualRoot Type="subkey">
      <Path Type="string"></Path>
      <Alias Type="string"></Alias>
      <Comment Type="string"></Comment>
      <MigratedPermissions Type="dword">2</MigratedPermissions>
      <Users Type="array"/>
    </VirtualRoot>
    <VirtualRoot Type="subkey">
      <Path Type="string">D:\SFTP_A</Path>
      <Alias Type="string">SFTP_A1</Alias>
      <Comment Type="string"></Comment>
      <MigratedPermissions Type="dword">2</MigratedPermissions>
      <Users Type="array">
        <Item Type="string">SFTP Users Root Users,allow,use read write deletefile list create deletedir</Item>
        <Item Type="string">FTPDan,allow,use read write deletefile list create deletedir</Item>
        <Item Type="string">SFTP_ClaireVIP,allow,use read write deletefile list create deletedir</Item>
        <Item Type="string">SFPT_ADMIN,allow,use read write deletefile list create deletedir</Item>
      </Users>
    </VirtualRoot>
    <VirtualRoot Type="subkey">
      <Path Type="string">D:\Company_Exports_SFTP</Path>
      <Alias Type="string">Company_Exports_SFTP</Alias>
      <Comment Type="string"></Comment>
      <MigratedPermissions Type="dword">2</MigratedPermissions>
      <Users Type="array">
        <Item Type="string">DOMAINA\SFTP_ADMINUSER,allow,use read list</Item>
      </Users>
    </VirtualRoot>

我想把它转换成excel csv格式的列表。我想要的输出如下:

有什么办法让我做到这一点吗?最好是命令。
谢谢

mkh04yzy

mkh04yzy1#

使用PowerShell脚本

using assembly System.Xml.Linq 

$inputFilename = "c:\temp\test.xml"
$outputFilename = "c:\temp\test.csv"
$xDoc = [System.Xml.Linq.XDocument]::Load($inputFilename)

$virtualRoots =  $xDoc.Descendants("VirtualRoot")
$table = [System.Collections.ArrayList]::new()
foreach($virtualRoot in $virtualRoots)
{
   $path = $virtualRoot.Element('Path').Value
   $alias = $virtualRoot.Element('Alias').Value
   foreach($item in $virtualRoot.Descendants('Item'))
   {
      $newRow = New-Object -TypeName psobject
      $newRow | Add-Member -NotePropertyName 'Path Type' -NotePropertyValue $path
      $newRow | Add-Member -NotePropertyName 'Alias Type' -NotePropertyValue $alias
      $newRow | Add-Member -NotePropertyName 'Item Type' -NotePropertyValue $item.Value

      $table.Add($newRow) | Out-Null
   }
}
$table | format-Table
$table | Export-CSV -Path $outputFilename

相关问题