PowerShell批量将无表头CSV转换为指定格式XML并导出的实现问题
调整后的完整实现代码
# 源CSV文件夹路径 $sourceFolder = 'C:\Users\somename\Desktop\FOLDER\Import\' # 目标XML输出文件夹路径 $destFolder = 'C:\Users\somename\Desktop\FOLDER\Output\' # 自动创建目标文件夹(如果不存在) if (-not (Test-Path -Path $destFolder)) { New-Item -ItemType Directory -Path $destFolder | Out-Null } # 遍历所有CSV文件 Get-ChildItem -Path $sourceFolder -Filter *.csv | ForEach-Object { $csvFile = $_.FullName $outputXmlPath = Join-Path -Path $destFolder -ChildPath ($_.BaseName + '.xml') # 导入无表头CSV,手动指定列名 $csvRows = Import-Csv -Path $csvFile -Header Col1,Col2,Col3,Col4 -Encoding UTF8 # 拼接所有book节点 $bookNodes = @() foreach ($row in $csvRows) { # 拼接name字段(第三列+第四列,中间加逗号) $name = $row.Col3 + ',' + $row.Col4 # 生成单个book节点片段 $bookNodes += @" <book> <title>$($row.Col1)</title> <acode>$($row.Col2)</acode> <name>$name</name> </book> "@ } # 生成完整XML内容,外层套统一根节点<books>(XML规范要求必须有唯一根节点) $fullXml = @" <?xml version="1.0" encoding="UTF-8"?> <books> $($bookNodes -join "`n") </books> "@ # 输出XML文件 $fullXml | Out-File -FilePath $outputXmlPath -Encoding UTF8 }
关键修改说明
- 去掉了原代码中先复制CSV到目标目录再改后缀的冗余逻辑,直接处理CSV生成XML后写入目标路径
- 导入无表头CSV时通过
-Header参数手动指定4列的列名,解决无表头无法正确读取字段的问题 - 按照需求拼接第三、第四列为
name节点值,通过Here-String模板生成符合要求的XML节点结构 - 外层增加了
<books>根节点,符合XML格式规范,如果不需要根节点仅保留单个,可自行调整模板内容 - 如果CSV内容包含XML特殊字符(比如<>&等),可以对字段值添加转义处理,示例:
$([System.Security.SecurityElement]::Escape($row.Col1))
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

