Buenas,
como te decía el problema está en que no tienes implementado el método characters, que es el que se encarga de leer el contenido de cada elemento.
SAX es mas eficiente que JDOM o que otras maneras de leer xml, porque no genera el arbol del xml en memoria si no que funciona por eventos. El startElement cuando comienza un elemento, el endElement cuando termina, etc.
En este caso te hace falta leer desde el characters hasta encontrar los números de las ventas en cada mes. No me gusta mandar código completo, pero con esto que te dejo aquí se almacena en el vector de Empleados, cada Empleado con sus ventas mensuales.
import java.util.Vector;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class LectorXMLVentas extends DefaultHandler {
private Vector<Empleado> empleadosVentas;
private Empleado emp;
private Vector<Integer> ventas;
/**
* Método que crea el lector con un XMLReaderFactory
*
* @throws SAXException
*/
public LectorXMLVentas() throws SAXException {
empleadosVentas = null;
emp = null;
ventas = null;
}
/**
* Método que determina que hay que hacer al comienzo del procesado del
* documento xml
*
*/
public void startDocument() throws SAXException {
}
/**
* Método que determina que hay hacer al terminar de leer una etiqueta
*
*/
public void endDocument() throws SAXException {
}
/**
* Metodo que se encarga de tratar cada elemento en el inicio de la lectura
* del mismo en el archivo XML.
*/
public void startElement(String namespace, String sName, String qName,
Attributes atrs) throws SAXException {
if (qName.equals("ventas")) {// si es la linea de ventas creamos el
// vector
empleadosVentas = new Vector<Empleado>();
} else if (qName.equals("EJ_2010")) {
// no tenemos que hacer nada
} else if (qName.equals("volumen")) {// si es volumen aqui empieza un
// //nuevo empleado
// y creamos el vector para ir metiendo sus ventas de //cada mes
String codE = atrs.getValue("cod");
emp = new Empleado(codE);
ventas = new Vector<Integer>();// cuando terminemos de //leer
// este elemento volcaremos este vector al //empleado
}// else
// sino estamos leyendo valores de ventas de meses, en este caso
// //segun sea un mes u otro
// almacenaVentas(atrs);
}
public void characters(char ch[], int start, int length) {
String num = null;
num = String.valueOf(ch, start, length);
try {
Integer ventaMensual = Integer.parseInt(num);
ventas.add(ventaMensual);
} catch (NumberFormatException e) {
}
}
/**
* Metodo que se encarga guardar la informacion necesaria al finalizar la
* lectura de cada elemento del archivo XML.
*/
public void endElement(String namespace, String sName, String qName)
throws SAXException {
if ("volumen".equals(sName)) {
emp.fijaVentas(ventas);// le fijamos las ventas ya insertadas
empleadosVentas.add(emp);// lo añadimos al vector
}
}
/**
* Método que devuelve el vector de empleados con los datos de las ventas
* cargados
*
* @return vector de empleados
*
*/
public Vector<Empleado> dameEmpleadosCargaVentas() {
return empleadosVentas;
}
}
Espero que te sirva,
Un saludo