
package leerfacturaxml;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Iterator;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

public class LeerFacturaXML {

    public static void main(String[] args) {
        DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
        DecimalFormat[] decimalFormat = new DecimalFormat[4];
        decimalFormat[0] = new DecimalFormat("###,###,##0", decimalFormatSymbols);
        decimalFormat[1] = new DecimalFormat("##0", decimalFormatSymbols);
        decimalFormat[2] = new DecimalFormat("###,##0.00", decimalFormatSymbols);
        decimalFormat[3] = new DecimalFormat("###,###,##0.00", decimalFormatSymbols);       
        decimalFormatSymbols.setDecimalSeparator(',');
        decimalFormatSymbols.setGroupingSeparator('.'); 

        Document document = null;
        try {          
              document = new SAXBuilder().build(new InputStreamReader(new FileInputStream(new File("D:\\XMLs_creados\\FACTURA.xml")), StandardCharsets.ISO_8859_1));
        } catch (Exception e) 
           {System.out.println(e.getMessage());}
        
        Element raiz = document.getRootElement();
        
        System.out.println("-------------------------------------");
        System.out.println("-------- DATOS FACTURA XML ----------");
        System.out.println("-------------------------------------");
        
        Element cabecera = raiz.getChild("CABECERA");
        String numFactura = cabecera.getAttributeValue("numFactura");
            System.out.println("numero factura: "+numFactura);
            
        Element fecha = cabecera.getChild("FECHA"); 
        String fechaFactura = fecha.getText();
            System.out.println(fechaFactura);
            
        Element cliente = cabecera.getChild("CLIENTE");
        
        Element nif = cliente.getChild("NIF");
        String nifCliente = nif.getText();
            System.out.println(nifCliente);        
        
        Element nombre = cliente.getChild("NOMBRE");
        String nombreCliente = nombre.getText();
            System.out.println(nombreCliente);                         
            
        Element lineas = raiz.getChild("LINEAS");         
        List listaLineas = lineas.getChildren("LINEA");
        Iterator iteratorLineas = listaLineas.iterator(); 
        while (iteratorLineas.hasNext())
          {      
            System.out.println("-------------------------------------");
            Element linea = (Element)iteratorLineas.next(); 
            
            Element descripcion = linea.getChild("DESCRIPCION");
            String textoDescripcion = descripcion.getText();
                System.out.println(textoDescripcion);
                
            Element precio = linea.getChild("PRECIO");
            String textoPrecio = precio.getText();
                System.out.println(String.format("%18s",decimalFormat[2].format( Double.parseDouble(textoPrecio) )));

            Element unidades = linea.getChild("UNIDADES");
            String textoUnidades = unidades.getText();
                System.out.println(String.format("%15s",decimalFormat[0].format( Integer.parseInt(textoUnidades) )));                
          }        
    }
    
}
