Converting data to XML while Processing it
import java.io.*;
import java.text.*;
import java.util.*;
import org.jdom.*;
import org.jdom.output.XMLOutputter;
public class BattingAverage {
public static void main(String[] args) {
Element root = new Element("players");
try {
FileInputStream fin = new FileInputStream(args[0]);
BufferedReader in
= new BufferedReader(new InputStreamReader(fin));
String playerStats;
// for formatting batting averages
DecimalFormat averages = (DecimalFormat)
NumberFormat.getNumberInstance(Locale.US);
averages.setMaximumFractionDigits(3);
averages.setMinimumFractionDigits(3);
averages.setMinimumIntegerDigits(0);
while ((playerStats = in.readLine()) != null) {
String[] stats = splitLine(playerStats);
String formattedAverage;
try {
int atBats = Integer.parseInt(stats[6]);
int hits = Integer.parseInt(stats[8]);
int walks = Integer.parseInt(stats[19]);
int hitByPitch = Integer.parseInt(stats[21]);
int sacrificeFlies = Integer.parseInt(stats[16]);
int sacrificeHits = Integer.parseInt(stats[15]);
int officialAtBats
= atBats - walks - hitByPitch - sacrificeHits;
if (officialAtBats <= 0) formattedAverage = "N/A";
else {
double average = hits / (double) officialAtBats;
formattedAverage = averages.format(average);
}
}
catch (Exception e) {
// skip this player
continue;
}
Element player = new Element("player");
Element first_name = new Element("first_name");
first_name.setContent(stats[1]);
player.addChild(first_name);
Element surname = new Element("surname");
surname.setContent(stats[0]);
player.addChild(surname);
Element battingAverage = new Element("batting_average");
battingAverage.setContent(formattedAverage);
player.addChild(battingAverage);
root.addChild(player);
}
Document doc = new Document(root);
// serialize it into a file
FileOutputStream fout
= new FileOutputStream("battingaverages.xml");
XMLOutputter serializer = new XMLOutputter();
serializer.output(doc, fout);
fout.flush();
fout.close();
in.close();
}
catch (IOException e) {
System.err.println(e);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Usage: java BattingAverage input_file.tab");
}
}
public static String[] splitLine(String playerStats) {
// count the number of tabs
int numTabs = 0;
for (int i = 0; i < playerStats.length(); i++) {
if (playerStats.charAt(i) == '\t') numTabs++;
}
int numFields = numTabs + 1;
String[] fields = new String[numFields];
int position = 0;
for (int i = 0; i < numFields; i++) {
StringBuffer field = new StringBuffer();
while (position < playerStats.length()
&& playerStats.charAt(position++) != '\t') {
field.append(playerStats.charAt(position-1));
}
fields[i] = field.toString();
}
return fields;
}
}