0

0

PowerShell如何从XML文件中导出数据到CSV

星降

星降

发布时间:2026-01-29 03:39:36

|

406人浏览过

|

来源于php中文网

原创

PowerShell加载XML需显式指定UTF8编码并确保单根节点,用Select-Xml处理命名空间和嵌套更稳定,导出CSV前须统一字段顺序并显式处理空值。

powershell如何从xml文件中导出数据到csv

Get-Content + [xml] 加载 XML 时要注意编码和根节点

PowerShell 默认用 UTF-16 读取 XML,但很多导出的 XML 文件是 UTF-8 且无 BOM,直接 Get-Content file.xml 可能报错 "Data at the root level is invalid"。必须显式指定编码,并确认 XML 有且仅有一个根节点。

  • 优先用 Get-Content -Path "data.xml" -Encoding UTF8(PowerShell 6+)或 Get-Content -Path "data.xml" -Encoding UTF8BOM(旧版需加 BOM)
  • 再转为 XML 对象:[xml]$xml = Get-Content ...;若失败,先用记事本另存为 UTF-8 with BOM 再试
  • 检查结构:$xml.ChildNodes.Count 应为 1,否则需手动定位到实际数据容器节点(如 $xml.Root.Items.Item

Select-Xml 提取多层嵌套节点更稳定

当 XML 结构含命名空间、重复子节点(如多个 )或路径较深时,[xml] 强转后手动遍历易出错。Select-Xml 支持 XPath,可精准定位并返回 XmlNode 集合,适合后续导出。

  • 无命名空间示例:Select-Xml -Path "data.xml" -XPath "//item"
  • 有命名空间时需注册前缀:$ns = @{d="http://example.com/ns"}; Select-Xml -Path "data.xml" -XPath "//d:entry" -Namespace $ns
  • 结果对象的 .Node 属性才是原始 XML 节点,提取属性用 .Node.id,文本内容用 .Node.InnerText

导出 CSV 前必须统一字段结构,避免列错位

XML 中每个 的子元素数量/顺序可能不一致(比如有的有 ,有的没有),直接转 PSCustomObject 后用 Export-Csv 会导致 CSV 列头混乱或数据偏移。

SoftGist
SoftGist

SoftGist是一个软件工具目录站,每天为您带来最好、最令人兴奋的软件新产品。

下载
  • 先定义固定字段顺序:$props = @("id", "name", "price", "category")
  • 逐节点构造对象时,用 if ($node.price) { $node.price.'#text' } else { $null } 显式处理缺失值
  • 不要依赖 $node.ChildNodes | ForEach-Object { $_.Name, $_.'#text' } —— 节点顺序不保证,且 #text 可能含空白符
  • 导出时加 -NoTypeInformation,否则首行会多出 #TYPE System.Management.Automation.PSCustomObject
$xmlPath = "data.xml"
$csvPath = "output.csv"

稳定加载

$content = Get-Content -Path $xmlPath -Encoding UTF8 [xml]$xml = $content

提取所有 item 节点(假设结构为 ......

$items = $xml.root.item

构造对象数组

$data = foreach ($item in $items) { [PSCustomObject]@{ id = if ($item.id) { $item.id.'#text' } else { $null } name = if ($item.name) { $item.name.'#text' } else { $null } price = if ($item.price) { $item.price.'#text' } else { $null } category = if ($item.category) { $item.category.'#text' } else { $null } } }

导出,确保列顺序与定义一致

$data | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8

PowerShell 处理 XML 导出 CSV 最容易卡在编码识别和节点空值处理上,特别是当原始 XML 来自不同系统时,InnerText'#text' 的差异、命名空间未声明、以及 UTF-8 无 BOM 文件被误读,这三处不提前验证,后面怎么调 Export-Csv 参数都没用。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

778

2023.08.22

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

75

2025.12.04

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1900

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2091

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1066

2024.11.28

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

0

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 19.1万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号