如何使用PowerShell将XML中对应ID的值替换入CSV并保存
实现方案
你现有的代码已经实现了从XML中匹配ID对应值的核心逻辑,仅需补充值回写到CSV行和结果导出的逻辑即可,同时我们可以提前构建映射哈希表来提升大文件的处理效率,完整代码如下:
$CSVpath = "G:\1.csv" $xmlPath = "G:\1.xml" # 替换后的文件输出路径,不会覆盖原文件,避免数据丢失 $outputCsvPath = "G:\1_替换完成.csv" # 加载XML文件 ($xmlDoc = [xml]::new()).Load((Convert-Path $xmlPath)) # 预构建字段-ID-值的三级映射表,避免循环中重复遍历XML节点 $mappingTable = @{} foreach ($enumType in $xmlDoc.enum_types.enum_type) { $field = $enumType.field_name $mappingTable[$field] = @{} foreach ($item in $enumType.items.item) { $mappingTable[$field][$item.id] = $item.value } } # 导入待处理CSV $csvData = Import-Csv -Path $CSVpath $allColumns = $csvData[0].psobject.Properties.Name # 遍历替换ID值 foreach ($row in $csvData) { foreach ($col in $allColumns) { $currentId = $row.$col # 仅当字段有映射配置、且ID存在对应值时执行替换 if ($mappingTable.ContainsKey($col) -and $mappingTable[$col].ContainsKey($currentId)) { $row.$col = $mappingTable[$col][$currentId] } } } # 导出处理后的CSV,指定编码避免乱码,如需在Excel中正常打开可将Encoding改为UTF8BOM $csvData | Export-Csv -Path $outputCsvPath -Encoding UTF8 -NoTypeInformation
说明
- 预构建映射表的优化方案,处理10万行以上的大文件时效率提升非常明显
- 导出时默认保留原文件,生成新的结果文件,避免误操作丢失原始数据
- 可根据实际使用场景调整导出编码,适配不同的读取工具
内容的提问来源于stack exchange,提问作者microset
相关产品推荐
相关产品推荐

