有人知道如何将XML转换为CSV列表吗?我试过使用linq,但由于某种原因,它不适合我。
我有一个文件C:\temp\company_userlist. xml如下:
<?xml version="1.0" encodCompany="utf-8"?>
<VShell Version="4.0">
<VirtualRoots Type="subkey">
<VirtualRoot Type="subkey">
<Path Type="strCompany"></Path>
<Alias Type="strCompany"></Alias>
<Comment Type="strCompany"></Comment>
<MigratedPermissions Type="dword">2</MigratedPermissions>
<Users Type="array"/>
</VirtualRoot>
<VirtualRoot Type="subkey">
<Path Type="strCompany">D:\company_SFTP\files\Company-a</Path>
<Alias Type="strCompany">CompanyA</Alias>
<Comment Type="strCompany"></Comment>
<MigratedPermissions Type="dword">2</MigratedPermissions>
<Users Type="array">
<Item Type="strCompany">Company_DOMAIN\SFTP Users Company Root Users,allow,use read write deletefile list create deletedir</Item>
<Item Type="strCompany">Company_DOMAIN\FTP-1,allow,use read write deletefile list create deletedir</Item>
<Item Type="strCompany">Company_DOMAIN\FTP-2,allow,use read write deletefile list create deletedir</Item>
<Item Type="strCompany">Company_DOMAIN\FTP-ADMIN,allow,use read write deletefile list create deletedir</Item>
</Users>
</VirtualRoot>
<VirtualRoot Type="subkey">
<Path Type="strCompany">D:\company_SFTP\files\Company-AB1</Path>
<Alias Type="strCompany">ADMINISSUER</Alias>
<Comment Type="strCompany"></Comment>
<MigratedPermissions Type="dword">2</MigratedPermissions>
<Users Type="array">
<Item Type="strCompany">Company_DOMAIN\SFTPDefaultIssuerRO,allow,use read list</Item>
</Users>
</VirtualRoot>
<VirtualRoot Type="subkey">
<Path Type="strCompany">D:\company_SFTP\files\Company-GB3</Path>
<Alias Type="strCompany">XYZ3</Alias>
<Comment Type="strCompany"></Comment>
<MigratedPermissions Type="dword">2</MigratedPermissions>
<Users Type="array">
<Item Type="strCompany">Company_DOMAIN\FTPxyz3,allow,use read write deletefile list create deletedir</Item>
</Users>
</VirtualRoot>
<VirtualRoot Type="subkey">
<Path Type="strCompany">D:\company_SFTP\files\Company-RT4</Path>
<Alias Type="strCompany">DFG-G</Alias>
<Comment Type="strCompany"></Comment>
<MigratedPermissions Type="dword">2</MigratedPermissions>
<Users Type="array">
<Item Type="strCompany">Company_DOMAIN\FTPABC,allow,use read write deletefile list create deletedir</Item>
</Users>
</VirtualRoot>
<Install Type="subkey">
<MainDirectory Type="strCompany">C:\Program Files\VanDyke Software\VShell\</MainDirectory>
</Install>
</VShell>
字符串
我想将上述样本转换成一个列表如下:
| 项目类型|路径类型| Path type |
| --|--| ------------ |
| Company_DOMAIN\SFTP用户公司根用户|D:\company_SFTP\files\Company-a| D:\company_SFTP\files\Company-a |
| 公司_DOMAIN\FTP-1| D:\company_SFTP\files\Company-a| D:\company_SFTP\files\Company-a |
| 公司_DOMAIN\FTP-2| D:\company_SFTP\files\Company-a| D:\company_SFTP\files\Company-a |
| 公司_DOMAIN\FTP-ADMIN| D:\company_SFTP\files\Company-a| D:\company_SFTP\files\Company-a |
| 公司_域\SFTPDefaultIssuerRO| D:\company_SFTP\files\Company-AB1| D:\company_SFTP\files\Company-AB1 |
| 公司_域\FTPxyz3| D:\company_SFTP\files\Company-GB3| D:\company_SFTP\files\Company-GB3 |
| 公司_DOMAIN\FTPABC| D:\company_SFTP\files\Company-RT4| D:\company_SFTP\files\Company-RT4 |
1条答案
按热度按时间hyrbngr71#
首先枚举我们想要从中提取数据的所有
<VirtualRoot />
元素:字符串
然后我们需要扁平化
<Users />
子元素,并为每个<Item />
子元素创建一个object对象。我们可以用
Select-Object -ExpandProperty
执行第一个展平步骤,如下所示:型
现在我们只需要迭代每个
<Item />
元素并构造一些输出对象,最后得到如下结果:型
... |Where-Object {$_.Item}
管道元素将过滤掉包含空<Item />
元素的节点,-replace ',.*$'
将删除每个包含的权限字符串中第一个逗号之后的所有内容,只留下主体名称。因此,得到的对象集最终看起来像:
型
漂亮的平面对象可以轻松导出为CSV文件:
型