使用PowerShell解析嵌套XML数组并导出为CSV的技术问询
PowerShell读取嵌套XML并导出为CSV单条记录
要处理这种嵌套XML结构,核心是遍历每个<object>,再遍历其下的每个<job-action>,将父级字段与子级字段组合成单条记录,最后导出为CSV。以下是具体实现:
步骤1:加载XML文件
先用[xml]类型转换器读取XML内容,方便后续节点访问:
# 替换为你的XML文件路径 [xml]$xmlContent = Get-Content -Path "C:\path\to\your\file.xml"
步骤2:遍历嵌套节点并构建记录
通过嵌套循环,将每个<object>与它的每一个<job-action>配对,生成自定义对象:
$csvRecords = foreach ($object in $xmlContent.objects.object) { # 提取父级object的字段 $objectId = $object.id.'#text' $objectName = $object.name.'#text' # 遍历当前object下的所有job-action foreach ($jobAction in $object.'job-actions'.'job-action') { # 构建单条记录对象 [PSCustomObject]@{ ObjectId = $objectId ObjectName = $objectName JobActionId = $jobAction.id.'#text' JobActionName = $jobAction.name.'#text'.Trim() # 去除文本多余空格 } } # 处理没有job-action的object(可选逻辑) if (-not $object.'job-actions'.'job-action') { [PSCustomObject]@{ ObjectId = $objectId ObjectName = $objectName JobActionId = $null JobActionName = $null } } }
步骤3:导出为CSV
将收集到的记录导出为CSV文件:
$csvRecords | Export-Csv -Path "C:\path\to\output.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 带
type属性的XML节点,其文本内容存储在#text属性中,因此需要用.id.'#text'格式提取实际值。 - 对于包含多个
<job-action>的<object>,会生成多条CSV记录,每条对应一组父级字段与子动作字段的组合。 - 可选的空job-action处理逻辑,确保即使某个object没有子动作,也能保留其基础记录。
内容的提问来源于stack exchange,提问作者Tony Pedretti
相关产品推荐
相关产品推荐

