【问题标题】:Parsing a .csv file to xml with Java使用 Java 将 .csv 文件解析为 xml
【发布时间】:2017-03-29 13:40:39
【问题描述】:

大家好,所以我正在尝试制作一个程序,从 .csv 文件转换数据,构建 .csv 文件的 DOM 表示,然后将其输出到 xml 文件。

我目前正在使用下面的代码解析 .csv 文件,但我不确定如何获取这些信息并构建 DOM 表示。我已经阅读并遇到了“jaxb”,但似乎

.csv 文件信息

QUESTIONS,Comment,Yes,Comment,No,Comment,Sit,Comment,Stand,Comment,Blank,Comment,Optional,Comment
Is there free circulation of air through and about the building in which you work?,a,468,,249,,,,,,93,,,
"Are there offensive odors in the rooms occupied by employees; if so, from what causes?",b,342,,233,,,,,,235,,,
Are there facilities for washing?,c,460,,124,,,,,,226,,,
"Are seats provided, as prescribed by law?",,320,,192,,,,,,298,,,
Are employees furnished with pure drinking water?,d,527,,102,,,,,,181,,,
Does the work require the employees to stoop over?,,587,,116,,,,,,107,,,
Are there proper and separate facilities for change of dress by males and females?,e,354,,221,,,,,,235,,,
Are there separate water-closets for males and females?,f,509,,126,g,,,,,175,,,
Are there stairways from the windows outside?,,350,,318,,,,,,148,,,
Are the rooms supplied with water pipes?,,265,,385,,,,,,165,,,
Are there hose attachments?,,224,,375,,,,,,218,,,
Are employees compelled to stand or sit at their work?,h,,,,,469,,175,,99,,67,
Are there water tanks and buckets on each floor?,,236,,387,,,,,,198,,,

解析器类。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays; 

public class parserClass {

@SuppressWarnings("rawtypes")
   public static void main(String[] args) throws Exception {
               String splitBy = ",";
       BufferedReader br = new BufferedReader(new FileReader("surveydata.csv"));
       String line = br.readLine();
       while((line = br.readLine()) !=null){
            String[] b = line.split(splitBy);
           System.out.println(Arrays.toString(b));
       }
       br.close();

 }
}*

它输出到控制台的信息

  [Is there free circulation of air through and about the building in which you work?, a, 468, , 249, , , , , , 93]
["Are there offensive odors in the rooms occupied by employees; if so,  from what causes?", b, 342, , 233, , , , , , 235]
[Are there facilities for washing?, c, 460, , 124, , , , , , 226]
["Are seats provided,  as prescribed by law?", , 320, , 192, , , , , , 298]
[Are employees furnished with pure drinking water?, d, 527, , 102, , , , , , 181]
[Does the work require the employees to stoop over?, , 587, , 116, , , , , , 107]
[Are there proper and separate facilities for change of dress by males and females?, e, 354, , 221, , , , , , 235]
[Are there separate water-closets for males and females?, f, 509, , 126, g, , , , , 175]
[Are there stairways from the windows outside?, , 350, , 318, , , , , , 148]
[Are the rooms supplied with water pipes?, , 265, , 385, , , , , , 165]
[Are there hose attachments?, , 224, , 375, , , , , , 218]
[Are employees compelled to stand or sit at their work?, h, , , , , 469, , 175, , 99, , 67]
[Are there water tanks and buckets on each floor?, , 236, , 387, , , , , , 198]

【问题讨论】:

标签: java xml csv


【解决方案1】:

也许一个简单的低代码选项是为此使用 Jackson。有一个Jackson CSV module 将读取 CSV 文件(具有定义的架构 - 在这种情况下,您可以使用标题行),然后将其发送回 XML(另一种免费行为)。

可以使用以下方式读取 CSV:

CsvSchema bootstrap = CsvSchema.emptySchema().withHeader();
CsvMapper csvMapper = new CsvMapper();
MappingIterator<Map<?, ?>> mappingIterator = csvMapper.reader(Map.class).with(bootstrap).readValues(file);

然后使用类似的方式将其作为 XML 发出:

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.writeValue(mappingIterator.next....

当然,还有许多其他选项可以做到这一点。至少使用 CSV 解析器,例如 Apache Commons CSV,并且不要尝试手动解析 CSV(潜在问题太多,其中大部分已经被稳健地解决了)。

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2017-12-17
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2013-12-24
    • 2015-06-20
    相关资源
    最近更新 更多