Fórum Gerencia arquivos xml #503419

04/12/2014

0

Boa tarde estou com dificuldade em bola um meio para controla uma lista de arquivos xml, sendo quer sera exibido em uma jtable uma lista de xml com alguns informações especificas ex(numero da nota, fornecedor e total). onde posso pesquisar por numero da nota e deleta o arquivo caso seja preciso, bom eu estou conseguindo ler o arquivo e também deleta mais acho que não tenho segurança se realmente é o arquivo correto a deletar segue a baixo o código

Classe auxiliar para que possa ter as informações listada acima

public class DadosNFe {

    @SwingColumn(description = "Numero NFE")
    private String doc;
    @SwingColumn(description = "Fornecedor")
    private String fornecedor;
    @SwingColumn(description = "Valor")
    private String valor;
    private String nomeArquivo;

    public DadosNFe() {
    }



Classe com os metodos de leitura do xml


public class LerXml {

    private File arquivos[];
    private File f;
    private File diretorio;
    private SAXBuilder sb;
    private Document d;
    private Element nfe;
    private Iterator i_atr;
    private List atributes;
    private List elements;
    private DadosNFe dados = new DadosNFe();
    private List<Document> nfs = new LinkedList<>();
    private List<DadosNFe> listaDados = new LinkedList<>();
    private List<String>enderecos = new LinkedList<>();
    public LerXml() {
    }

    public List<DadosNFe> lerXml() {
       
            f = new File("Z://xml fornecedores//XML P IMPORTA//N_21141106498638000180550010000045461001669390_MA_000000048774796_11167282_procNFe.xml");
            diretorio = new File("Z://xml fornecedores//XML P IMPORTA");
       

        arquivos = diretorio.listFiles();
        dados.setNomeArquivo(f.getName());


        sb = new SAXBuilder();
        //Este documento agora possui toda a estrutura do arquivo.  


        try {
            for (int i = 0; i < arquivos.length; i++) {
                Document d = sb.build(arquivos[i]);
                nfs.add(d);
                enderecos.add(arquivos[i].toString());
            }
            JOptionPane.showMessageDialog(null, nfs.size()+" "+enderecos.size());
            for (Document doc : nfs) {
                Element nfe = doc.getRootElement();
                List atributes = nfe.getAttributes();
                List elements;
                           
                elements = nfe.getChildren();
                Iterator i = elements.iterator();
                while (i.hasNext()) {
                    Element element = (Element) i.next();                  
                    trataElement(element);
                }
            }

           return listaDados;
        } catch (IOException ex) {
            //   System.out.print("erro "+ex);
            JOptionPane.showMessageDialog(null, "Erro :\n" + ex);
            //     Logger.getLogger(LerXml.class.getName()).log(Level.SEVERE, null, ex);
            
            return null;
        } catch (JDOMException ex) {
            Logger.getLogger(LerXml.class.getName()).log(Level.SEVERE, null, ex);
         return null;
        }


    }

    private void trataElement(Element element) {
    
//Recuperamos os atributos filhos (Attributes)  
        List atributes = element.getAttributes();
        Iterator i_atr = atributes.iterator();

//Iteramos com os atributos filhos  
        while (i_atr.hasNext()) {
            Attribute atrib = (Attribute) i_atr.next();
         //   System.out.println("\nattribute de (" + element.getName() + "):" + atrib.getName() + " - valor: " + atrib.getValue());
        }
//Recuperamos os elementos filhos (children)  
        List elements = element.getChildren();
        Iterator it = elements.iterator();

        //Iteramos com os elementos filhos, e filhos do dos filhos  
        while (it.hasNext()) {
             
            Element el = (Element) it.next();
        //    System.out.println("elemento(" + element.getName() + "):" + el.getName() + " - Valor: " + el.getText());

            //  aqui voce pode escolher qual(is) campo(s) quer manipular  
            if (el.getName().equals("vNF")) {
                //  grava_no_banco de dados(element.getAttributeValue("nNF"));  
           //     System.out.println("encontrou nNF . . . com valor: " + el.getName() +" "+ el.getText());
                dados.setValor(el.getText().toString());
            }
            if (el.getName().equals("xNome") && element.getName().equals("emit")) {
                //  grava_no_banco de dados(element.getAttributeValue("nNF"));  
           //     System.out.println("encontrou nNF . . . com valor: " + el.getName() + " "+el.getText());
                dados.setFornecedor(el.getText());

            }
            if (el.getName().equals("nNF")) {
                //  grava_no_banco de dados(element.getAttributeValue("nNF"));  
        //        System.out.println("encontrou nNF . . . com valor: " + el.getName() + el.getText());
                dados.setDoc(el.getText().toString());

            }
            if(dados.getDoc()!=null && dados.getFornecedor()!=null && dados.getValor()!=null ){
               listaDados.add(dados); 
               dados = new DadosNFe();
            }
           
            trataElement(el);
        }
    }

    public DadosNFe getDados() {
        return dados;
    }

    public void setDados(DadosNFe dados) {
        this.dados = dados;
    }

    public List<String> getEnderecos() {
        return enderecos;
    }

    public void setEnderecos(List<String> enderecos) {
        this.enderecos = enderecos;
    }
    
    
}

John Lima

John Lima

Responder

Posts

06/12/2014

Ronaldo Lanhellas

Creio que o seu problema seja relacionado ao JTable e não exatamente a leitura do XML, correto ?
Responder

Gostei + 0

10/12/2014

John Lima

Mudei o código e estou tendo todas as informaçoes que eu preciso porem quando do um Collection.sort fica as informações embaralhadas
Responder

Gostei + 0

12/12/2014

Ronaldo Lanhellas

Mudei o código e estou tendo todas as informaçoes que eu preciso porem quando do um Collection.sort fica as informações embaralhadas


Você pode sobreescrever a forma de comparação utilizada, fazendo da forma que você deseja ordenar, veja:

Collections.sort(lista, new Comparator<Aluno>() {@Override  
    public int compare(Aluno o1, Aluno o2) {  
        return o1.getNome().toUpperCase().compareTo(o2.getNome().toUpperCase());  
    }  
    }); 
Responder

Gostei + 0

12/12/2014

John Lima

Eu teste com uma quantidade menor de arquivos e estava ok msm antes com o código de ordenação que tinha usado. porem quando eu mando lista todos os arquivos apresentam informações diferentes.

imagem do sistema carregando alguns arquivos

[img]http://arquivo.devmedia.com.br/forum/imagem/316453-20141212-111831.jpg[/img]


Imagem da lista com todos os arquivos

[img]http://arquivo.devmedia.com.br/forum/imagem/316453-20141212-111724.jpg[/img]

o outro sistema é de terceiros e ele carrega as informações corretas, já o que eu fiz quando mando gera tudo ele carrega as informações de alguns arquivos errado
Responder

Gostei + 0

17/12/2014

Ronaldo Lanhellas

Como está o seu código de ordenação ? Poste aqui, outra coisa: verifica se o método equals() está implementando nas suas classes (Beans).
Responder

Gostei + 0

18/12/2014

John Lima

classe :


public class DadosNFe implements Comparable<DadosNFe> {

    @SwingColumn(description = "Numero NFE")
    private String doc;
    @SwingColumn(description = "Data Emissao")
    private String data;
    @SwingColumn(description = "Fornecedor")
    private String fornecedor;
    @SwingColumn(description = "Valor")
    private String valor;
    @SwingColumn(description = "Arquivo")
    private String nomeArquivo;
    
    
    public DadosNFe() {
    }

    public String getFornecedor() {
        return fornecedor;
    }

    public void setFornecedor(String fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDoc() {
        return doc;
    }

    public void setDoc(String doc) {
        this.doc = doc;
    }

    public String getValor() {
        return valor;
    }

    public void setValor(String valor) {
        this.valor = valor;
    }

    public String getNomeArquivo() {
        return nomeArquivo;
    }

    public void setNomeArquivo(String nomeArquivo) {
        this.nomeArquivo = nomeArquivo;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public int compareTo(DadosNFe o) {
   return Collator.getInstance().compare(this.data, o.data); 
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 13 * hash + Objects.hashCode(this.doc);
        hash = 13 * hash + Objects.hashCode(this.data);
        hash = 13 * hash + Objects.hashCode(this.fornecedor);
        hash = 13 * hash + Objects.hashCode(this.valor);
        hash = 13 * hash + Objects.hashCode(this.nomeArquivo);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final DadosNFe other = (DadosNFe) obj;
        if (!Objects.equals(this.doc, other.doc)) {
            return false;
        }
        if (!Objects.equals(this.data, other.data)) {
            return false;
        }
        if (!Objects.equals(this.fornecedor, other.fornecedor)) {
            return false;
        }
        if (!Objects.equals(this.valor, other.valor)) {
            return false;
        }
        if (!Objects.equals(this.nomeArquivo, other.nomeArquivo)) {
            return false;
        }
        return true;
    }



cod de ordenação :


        Collections.sort(lista, new Comparator<DadosNFe>() {@Override  
    public int compare(DadosNFe o1, DadosNFe o2) {  
        return o1.getData().compareTo(o2.getData()   );  
    }  
    });
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar