使用PowerShell将XML数据导出为CSV。具有唯一名称的子节点

时间:2017-06-07 15:53:52

标签: xml powershell csv child-nodes

我已经坚持了一段时间,无法弄清楚我错过了什么。我有一个XML文件,它是相机服务器配置的导出。我希望将用户与他们有权使用的相机进行匹配,但我很难弄清楚如何使用。

以下是XML的示例:

<?xml version="1.0" encoding="UTF-8"?>
<ExportedConfiguration verification="-11111111">
    <config timestamp="2017-05-30-08-35-21-533">
        <Users>
            <userlist>
                <user0>
                    <username>Smith, John</username>
                    <cameras>
                        <UserCamera-fd346f0a-362c-4171-b015-b3884db7d60f>
                            <cameraid>Inside-Camera1</cameraid>
                        </UserCamera-fd346f0a-362c-4171-b015-b3884db7d60f>
                    </cameras>
                </user0>
                <user1>
                    <username>Smith, Jane</username>
                    <cameras>
                        <UserCamera-07798ce7-b3fd-4cae-a0cd-339de22f38ab>
                            <cameraid>Outside-Camera1</cameraid>
                        </UserCamera-07798ce7-b3fd-4cae-a0cd-339de22f38ab>
                    </cameras>
                </user1>
              </userlist>
          </Users>

问题是所有内容都属于<user#>,并且相机信息属于<UserCamera-####>内的随机<user#>节点。我想我需要某种基于foreach的{​​{1}}循环,但不知道从哪里开始。

[编辑] 这是我到目前为止所拥有的。跑步时它只显示&#34; cameraid&#34;而不是实际名称:

<user#>

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

$file.SelectNodes("//Users/userlist/*") | ForEach-Object {
  [PSCustomObject]@{
    Username = $_.username
    Cameras  = $_.cameras.ChildNodes.cameraid -join ', '
  }
}