hola mira yo uso las librerias de xerces para parsear un xml es muy sencillo aca te dejo un fragmento de codigo que lo unico que tienes q hacer es pasarle un archivo xml como parametros y el se encarga de leerlo, tambien esta el metodo para guardar un archivo xml.
import Dominio.CargoEmpleado;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.apache.xerces.jaxp.DocumentBuilderFactoryImpl;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.xml.sax.SAXException;
/**
*
* @author djagus
*/
public class ExportarCargoyEmpleadosXML {
// Etiquetas XML Cargo
private static final String TAG_PERSONAL = "Personal";
private static final String TAG_CARGOS = "Cargos";
private static final String TAG_CARGO = "Cargo";
private static final String TAG_ID_CARGO = "IDCargo";
private static final String TAG_NOMBRE_CARGO = "NombreCargo";
private static final String TAG_PORCENTAJE_CARGO = "Porcentaje";
//Codificación Estandar
private static final String XML_VERSION = "1.0";
private static final String XML_ENCODING = "ISO-8859-1";
private static final String JAVA_ENCODING = "8859_1";
// Definición de Nombre de Archivo a Grabar
private String NOMBRE_ARCHIVO_XML;
// Variables
private Document xmlDoc = null;
private Element cargos = null;
private Element personal2 = null;
private Document dom;
private ArrayList<CargoEmpleado> cargosEmpleados = new ArrayList<CargoEmpleado>();
/** Creates a new instance of ExportarCargoyEmpleadosXML */
public ExportarCargoyEmpleadosXML(String ruta) {
this.NOMBRE_ARCHIVO_XML = ruta;
}
public ExportarCargoyEmpleadosXML(File archivo) {
parseXmlFile(archivo);
}
public void generaDocumentoXML() {
try {
// Crea un documento XML
DocumentBuilderFactory dbFactory = DocumentBuilderFactoryImpl.newInstance();
DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
xmlDoc = docBuilder.newDocument();
} catch (Exception e) {
System.out.println("Error : " + e);
}
// crea un elemento personal
personal2 = xmlDoc.createElement(TAG_PERSONAL);
cargos = xmlDoc.createElement(TAG_CARGOS);
xmlDoc.appendChild(personal2);
xmlDoc.getDocumentElement().appendChild(cargos);
xmlDoc.getDocumentElement().appendChild(personal);
}
public void generaDocumentoXMLCargo(CargoEmpleado cargo) {
Element elementoCargo;
Element item;
// crea los tags de cargo
elementoCargo = xmlDoc.createElement(TAG_CARGO);
elementoCargo.setAttribute(TAG_ID_CARGO, String.valueOf(cargo.getId()));
cargos.appendChild(elementoCargo);
item = xmlDoc.createElement(TAG_NOMBRE_CARGO);
item.appendChild(xmlDoc.createTextNode(cargo.getNo mbre()));
elementoCargo.appendChild(item);
item = xmlDoc.createElement(TAG_PORCENTAJE_CARGO);
item.appendChild(xmlDoc.createTextNode(String.valu eOf(cargo.getPorcentaje())));
elementoCargo.appendChild(item);
}
// genera el objeto de documento XML en una cadena de texto
public String generaTextoXML() {
StringWriter strWriter = null;
XMLSerializer xmlSerializer = null;
OutputFormat outFormat = null;
try {
xmlSerializer = new XMLSerializer();
strWriter = new StringWriter();
outFormat = new OutputFormat();
// estableciendo el formato
outFormat.setEncoding(XML_ENCODING);
outFormat.setVersion(XML_VERSION);
outFormat.setIndenting(true);
outFormat.setIndent(4);
// Define una escritura
xmlSerializer.setOutputCharStream(strWriter);
// Aplicando el formato establecido
xmlSerializer.setOutputFormat(outFormat);
// Serializando el documento XML
xmlSerializer.serialize(xmlDoc);
strWriter.close();
} catch (IOException ioEx) {
System.out.println("Error : " + ioEx);
}
return strWriter.toString();
}
public void grabaDocumentoXML(String textoXML) {
try {
OutputStream fout = new FileOutputStream(NOMBRE_ARCHIVO_XML + ".xml");
OutputStream bout = new BufferedOutputStream(fout);
OutputStreamWriter out = new OutputStreamWriter(bout, JAVA_ENCODING);
out.write(textoXML);
out.flush();
out.close();
} catch (UnsupportedEncodingException e) {
System.out.println("La Máquina Virtual no soporta la codificación Latin-1.");
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println("Error : " + e);
}
}
public void parseXmlFile(File archivo) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
//parse using builder to get DOM representation of the XML file
dom = db.parse(archivo);
parseDocumentCargos();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (SAXException se) {
se.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void parseDocumentCargos() {
Element docEle = dom.getDocumentElement();
NodeList nl = docEle.getElementsByTagName(TAG_CARGO);
if (nl != null && nl.getLength() > 0) {
for (int i = 0; i < nl.getLength(); i++) {
Element el = (Element) nl.item(i);
CargoEmpleado c = getCargo(el);
getCargosEmpleados().add(c);
}
}
}
public CargoEmpleado getCargo(Element caEl) {
CargoEmpleado c = new CargoEmpleado();
c.setId(Integer.parseInt(caEl.getAttribute(TAG_ID_ CARGO)));
c.setNombre(getTextValue(caEl, TAG_NOMBRE_CARGO));
c.setPorcentaje(Double.parseDouble(getTextValue(ca El, TAG_PORCENTAJE_CARGO)));
return c;
}
public String getTextValue(Element ele, String tagName) {
String textVal = null;
NodeList nl = ele.getElementsByTagName(tagName);
if (nl != null && nl.getLength() > 0) {
Element el = (Element) nl.item(0);
textVal = el.getFirstChild().getNodeValue();
}
return textVal;
}
public ArrayList<CargoEmpleado> getCargosEmpleados() {
return cargosEmpleados;
}
public void setCargosEmpleados(ArrayList<CargoEmpleado> cargosEmpleados) {
this.cargosEmpleados = cargosEmpleados;
}
}
/////////////////////////Clase cargo Empleado//////////////////////
/**
*
* @author djagus
*/
/**
*Esta clase nos determina los datos de los tipos de cargos de empleado que podra tener un empleado.
*/
public class CargoEmpleado {
private int id;
private String nombre;
private double porcentaje;
private boolean borrado;
/** Creates a new instance of CargoEmpleado */
public CargoEmpleado() {
}
/**
*@return Integer
*/
public int getId() {
return id;
}
/**
*@param id Integer
*/
public void setId(int id) {
this.id = id;
}
/**
*@return String
*/
public String getNombre() {
return nombre;
}
/**
*@param nombre String
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
*@return Double
*/
public double getPorcentaje() {
return porcentaje;
}
/**
*@param porcentaje Double
*/
public void setPorcentaje(double porcentaje) {
this.porcentaje = porcentaje;
}
}
espero haberte ayudado por las dudas las librerias de xerces te las puedes bajar de aqui
http://xerces.apache.org/