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

如何使用PowerShell读取XML并转换写入为CSV文件?

解决PowerShell转换XML到CSV/JSON的问题

为什么直接用Import-Clixml不行?

Import-Clixml是PowerShell专门用于导入自身序列化生成的XML(即Export-Clixml输出的文件),这类XML包含PowerShell对象的元数据,和普通业务XML结构完全不同。直接用它导入books.xml会得到异常的对象结构,自然无法正确导出为CSV。

正确转换XML到CSV的步骤

1. 加载普通XML文件

使用[xml]类型加速器加载XML内容,而非Import-Clixml:

$xml = [xml](Get-Content -Path .\books.xml -Raw)

2. 提取并转换XML节点为对象

遍历XML中的目标节点(比如catalog/book),将节点的属性和子元素映射为自定义对象的属性:

$books = $xml.catalog.book | ForEach-Object {
    [PSCustomObject]@{
        ID          = $_.id  # 提取book节点的id属性
        Author      = $_.author.InnerText  # 提取author子元素的文本
        Title       = $_.title.InnerText
        Genre       = $_.genre.InnerText
        Price       = [decimal]$_.price.InnerText  # 可选:转换为对应数据类型
        PublishDate = [DateTime]$_.publish_date.InnerText
        Description = $_.description.InnerText
    }
}

3. 导出为CSV

使用Export-Csv导出,加上-NoTypeInformation去掉多余的类型头:

$books | Export-Csv -Path .\books.csv -NoTypeInformation -Encoding UTF8

解决JSON截断问题

PowerShell的ConvertTo-Json默认序列化深度为2,若XML嵌套层次较深,会自动截断内容。解决方法是指定足够大的-Depth参数:

# 沿用上面的$books对象
$books | ConvertTo-Json -Depth 10 | Out-File .\books.json -Encoding UTF8

注意事项

  • 如果XML结构更复杂(比如存在重复子节点、多层嵌套),需要调整ForEach-Object中的对象构造逻辑,确保所有需要的字段都被正确提取。
  • 转换数据类型(如价格转decimal、日期转DateTime)可以避免CSV/JSON中出现格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:01:07