怎么用Java把CSV文件转换成XML格式

推荐使用OpenCSV解析CSV并结合JAXP的DOM+Transformer生成XML,可正确处理引号、换行、逗号等边界情况,自动转义特殊字符,确保XML格式规范;需注意UTF-8编码、字段名合法性及null值处理。

用Java把CSV文件转成XML,核心是读取CSV内容、解析字段、按XML结构生成字符串或写入文件。关键在于处理分隔符、引号包裹的字段、换行符等CSV常见情况,避免手动拼接XML出错。

使用OpenCSV + JAXP(推荐,稳定易控)

OpenCSV能正确解析带逗号、换行、双引号的CSV;JAXP(如TransformerFactory)可规范生成格式良好的XML,避免标签闭合错误或非法字符问题。

  • 添加Maven依赖:
      com.opencsv
      opencsv
      5.7.1
  • 读CSV:用CsvReaderCSVParser(新版推荐ICSVReader),首行作XML元素名
  • 写XML:用DocumentBuilder构建DOM树,再用Transformer输出——自动转义&等字符

处理CSV特殊字符和边界情况

CSV里字段含逗号、换行或双引号时,OpenCSV默认能识别被双引号包围的内容(如"Smith, John","25","New York")。但需注意:

  • 确保CSV编码与Java读取一致(如UTF-8),否则中文会乱码
  • 空字段、null值建议转为空字符串或跳过生成对应XML子元素
  • 字段名含空格或特殊符号(如First Name)→ XML中需转为合法标签名,例如替换成first_name或加下划线包装

简化方案:用StringBuilder手动生成(适合简单CSV)

如果CSV结构固定、无复杂内容(如无换行/引号),可跳过DOM,直接用StringBuilder拼接XML字符串:

  • 先写XML声明:
  • 每行数据封装为...,字段用xxx形式
  • 对字段内容调用StringEscapeUtils.escapeXml11()(来自Apache Commons Text)做基础转义
  • 性能高,但不校验XML结构,出错难调试

完整示例(OpenCSV + DOM)

假设CSV如下:
name,age,city
"Zhang San",28,"Beijing"
"Li, Wei",31,"Shanghai"

生成XML类似:



  
    Zhang San
    28
    Beijing
  

  
    Li, Wei
    31
    Shanghai
  

代码主干逻辑:读CSV → 创建Document → 每行建record元素 → 每字段建子元素并设文本内容 → Transformer写入文件。

基本上就这些。选OpenCSV+DOM最稳妥,手拼适合快速验证或极简场景。注意编码、转义、字段名合法性,转换就不容易翻车。