Această soluție nu are nevoie de biblioteci CSV sau xml și, știu, nu rezolvă probleme de coduri și caractere ilegale, dar este posibil să fiți interesat și de aceasta, cu condiția ca intrarea CSV să nu încalce regulile menționate mai sus.
Attention: You should not use this code unless you know what you do or don't have the chance to use a further library (possible in some bureaucratic projects)... Use a StringBuffer for older Runtime Environments...
Deci, aici mergem:
BufferedReader reader = new BufferedReader(new InputStreamReader(
Csv2Xml.class.getResourceAsStream("test.csv")));
StringBuilder xml = new StringBuilder();
String lineBreak = System.getProperty("line.separator");
String line = null;
List headers = new ArrayList();
boolean isHeader = true;
int count = 0;
int entryCount = 1;
xml.append("");
xml.append(lineBreak);
while ((line = reader.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line, ",");
if (isHeader) {
isHeader = false;
while (tokenizer.hasMoreTokens()) {
headers.add(tokenizer.nextToken());
}
} else {
count = 0;
xml.append("\t");
xml.append(lineBreak);
while (tokenizer.hasMoreTokens()) {
xml.append("\t\t<");
xml.append(headers.get(count));
xml.append(">");
xml.append(tokenizer.nextToken());
xml.append("");
xml.append(lineBreak);
count++;
}
xml.append("\t");
xml.append(lineBreak);
entryCount++;
}
}
xml.append("");
System.out.println(xml.toString());
Testul de intrare test.csv (furat de la un alt răspuns de pe această pagină):
string,float1,float2,integer
hello world,1.0,3.3,4
goodbye world,1e9,-3.3,45
hello again,-1,23.33,456
hello world 3,1.40,34.83,4999
hello 2 world,9981.05,43.33,444
Rezultatul rezultat:
hello world
1.0
3.3
4
goodbye world
1e9
-3.3
45
hello again
-1
23.33
456
hello world 3
1.40
34.83
4999
hello 2 world
9981.05
43.33
444