
package crearfacturaxml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class CrearFacturaXML {

    public static void main(String[] args) {
        Element raiz = new Element("FACTURA");

        //       C A B E C E R A
        
        Element cabecera = new Element("CABECERA");
        cabecera.setAttribute("numFactura", new java.text.SimpleDateFormat("yyyy").format(new java.util.Date())+"00356");
        raiz.addContent(cabecera);
        
        Element fechaFactura = new Element("FECHA");
        fechaFactura.setText(new SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()));
        cabecera.addContent(fechaFactura);
  
        Element datosCliente = new Element("CLIENTE");
        cabecera.addContent(datosCliente);
        
        Element NIFCliente = new Element("NIF");
        NIFCliente.setText("12345-X");
        datosCliente.addContent(NIFCliente);
        
        Element nombreCliente = new Element("NOMBRE");
        nombreCliente.setText("MANUEL MARTÍNEZ GILABERT");
        datosCliente.addContent(nombreCliente);

        //       L I N E A S
        
        Element lineas = new Element("LINEAS");
        raiz.addContent(lineas);
        
        Element linea;
        Element descripcion;
        Element precioUnitario;
        Element unidades;
                   
                    //       L I N E A   1
                    
            linea = new Element("LINEA");
            lineas.addContent(linea);         
                    
            descripcion = new Element("DESCRIPCION");
            descripcion.setText("saco cemento 25 kg.");
            linea.addContent(descripcion);
                        
            precioUnitario = new Element("PRECIO");
            precioUnitario.setText("3.5");
            linea.addContent(precioUnitario);
            
            unidades = new Element("UNIDADES");
            unidades.setText("1000");
            linea.addContent(unidades); 

                    //       L I N E A   2
                    
            linea = new Element("LINEA");
            lineas.addContent(linea);         
                                        
            descripcion = new Element("DESCRIPCION");
            descripcion.setText("ladrillo 4");
            linea.addContent(descripcion);
                        
            precioUnitario = new Element("PRECIO");
            precioUnitario.setText("0.2");
            linea.addContent(precioUnitario);
            
            unidades = new Element("UNIDADES");
            unidades.setText("200");
            linea.addContent(unidades); 
            
                    //       L I N E A   3

            linea = new Element("LINEA");
            lineas.addContent(linea);         
                                        
            descripcion = new Element("DESCRIPCION");
            descripcion.setText("ladrillo 25 años antigüedad");
            linea.addContent(descripcion);
                        
            precioUnitario = new Element("PRECIO");
            precioUnitario.setText("0.9");
            linea.addContent(precioUnitario);
            
            unidades = new Element("UNIDADES");
            unidades.setText("150");
            linea.addContent(unidades); 
            
        //       C R E A     F I C H E R O
        
        Document document = new Document(raiz); 

        Format format = Format.getPrettyFormat();
        format.setEncoding("ISO_8859_1"); 
        format.setIndent("   ");   
        
        try {      
              File ruta = new File("D:\\XMLs_creados");
              
              if (!ruta.exists())
              {  
                  System.out.println("No existe la ruta : "+ruta.getName()); 
                  if (ruta.mkdirs())
                      System.out.println("Ruta creada");
              }
              
              new XMLOutputter(format).output(document, new OutputStreamWriter(new FileOutputStream(new File("D:\\XMLs_creados\\FACTURA.xml")) , StandardCharsets.ISO_8859_1));                                                            //   nombre del archivo XML        
              // new XMLOutputter().output(document, System.out);          
        } catch (Exception e) 
           {System.out.println(e.getMessage());}
    }
}
