PowerShell将XML转为CSV:如何将key节点的line字段追加到结果中
PowerShell实现XML转CSV并追加key节点的line字段
我们需要将给定的XML转换为CSV格式,核心要求是把每个<TestElements>节点下<key>子节点中的line字段,追加到该节点下所有<td>元素的结果之后,最终输出符合预期的结构。
示例XML
[xml] $sample = '<TestTop><TestElements><td field="head.office">ABC</td><td field="head.number">101</td><td field="head.colour">Blue</td><key><office>ABC</office><number>101</number><line>1</line></key></TestElements><TestElements><td field="head.office">ABC</td><td field="head.number">102</td><td field="head.colour">Red</td><key><office>ABC</office><number>102</number><line>2</line></key></TestElements></TestTop>'
解决方案代码
# 遍历每个TestElements节点,处理内部的td和key数据 $outputObjects = $sample.TestTop.TestElements | ForEach-Object { # 把当前节点下的td元素转换为统一结构的对象 $_.td | Select-Object @{Name='field'; Expression={$_.field}}, @{Name='#text'; Expression={$_.'#text'}} # 构造line字段对应的对象,和td结构保持一致 [PSCustomObject]@{ field = 'line' '#text' = $_.key.line } } # 预览输出结果 $outputObjects | Format-Table -AutoSize # 导出为CSV文件(替换为你需要的文件路径) $outputObjects | Export-Csv -Path "./output.csv" -NoTypeInformation
代码说明
- 遍历每个
<TestElements>节点,保证每组td和对应的line字段关联,避免数据错位。 - 用
Select-Object将td的属性映射成和最终输出一致的对象结构,确保字段名匹配。 - 手动构造line对应的自定义对象,使其和td对象结构完全相同,合并后可直接输出为统一格式的CSV。
- 通过
Format-Table快速查看结果,Export-Csv的-NoTypeInformation参数会去掉CSV开头的类型信息,更符合常规CSV格式。
输出效果
运行代码后,Format-Table的预览结果如下:
field #text ----- ----- head.office ABC head.number 101 head.colour Blue line 1 head.office ABC head.number 102 head.colour Red line 2
导出的CSV文件内容为:
field,#text head.office,ABC head.number,101 head.colour,Blue line,1 head.office,ABC head.number,102 head.colour,Red line,2
内容的提问来源于stack exchange,提问作者felixmc
相关产品推荐
相关产品推荐

