You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:XML转CSV时如何实现成员信息逐行展示

问题:XML转CSV格式异常修复

原始XML内容

<App>    
    <SecurityGroup name="Admin">
        <Member username="John1" displayName="JohnDoe"/>
        <Member username="Jane1" displayName="JoeDoe"/>
    </SecurityGroup>
</App>

尝试的PowerShell脚本

$xml.app.childnodes | Select-Object @(
    @{l="name";e={ $_.member.username}},
    @{l="display";e={ $_.member.displayname }},
    @{l="group";e={ $_.name }}
) | Export-CSV "c:/test.csv"

当前错误输出

Security Group    Username           Displayname
Admin             John1 Jane1        JohnDoe JaneDoe

期望输出格式

SecurityGroupUsernameDisplayname
AdminJohn1JohnDoe
AdminJane1JoeDoe

修复后的PowerShell脚本

# 加载XML(如果是从文件读取,替换为 $xml = [xml](Get-Content "你的XML文件路径"))
$xml = [xml]@'
<App>    
    <SecurityGroup name="Admin">
        <Member username="John1" displayName="JohnDoe"/>
        <Member username="Jane1" displayName="JoeDoe"/>
    </SecurityGroup>
</App>
'@

# 嵌套遍历组和成员,生成逐行数据
$output = foreach ($group in $xml.App.SecurityGroup) {
    foreach ($member in $group.Member) {
        [PSCustomObject]@{
            SecurityGroup = $group.name
            Username      = $member.username
            Displayname   = $member.displayName
        }
    }
}

# 导出CSV(-NoTypeInformation避免生成类型注释行)
$output | Export-CSV "c:/test.csv" -NoTypeInformation

修复说明

原脚本中$_.member会返回当前组下的所有成员节点集合,直接访问username/displayName会把所有成员的对应值拼接成字符串,导致多行数据合并为一行。

修复后的脚本通过嵌套遍历解决问题:

  1. 先遍历每个SecurityGroup节点
  2. 对每个组,再遍历其下的每个Member节点
  3. 为每个成员单独创建对象,带上所属组的名称
  4. 最后统一导出,即可得到每行对应一个成员的目标格式

内容的提问来源于stack exchange,提问作者Hemnath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:40:50