Разбор файла.csv в xml с помощью Java
Привет всем, поэтому я пытаюсь создать программу, которая преобразует данные из файла.csv, создает DOM-представление файла.csv и затем выводит его в файл 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]
1 ответ
Возможно, простой вариант с низким кодом - использовать для этого Джексона. Существует модуль CSV Jackson, который будет читать файлы 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 вручную (существует слишком много потенциальных проблем, большинство из которых уже решены).