Gravar arquivo XML?

15 respostas
K

oi gente ... to com um problema aqui .. e pesei aqui e minha soluçao e consertar o arquivo Xml q tenho aqui ...

ok ...

eu tenho um metodo em java q gera um arquivo XMl ...segue ela ...

public boolean Salvar(String Campos_fornecedor,String Campos_receptor){

        boolean test=false;
        String XML="";

        try{
            XStream xstream = new XStream();

            CAMPOS Campos=new CAMPOS();
                Campos.setCampos_fornecedor(Campos_fornecedor);
                Campos.setCampos_receptor(Campos_receptor);

                List drivers = new ArrayList(1);
                drivers.add(Campos);

                XML=xstream.toXML(drivers);
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                bw.write(XML);
                bw.flush();
                bw.close();

                test=true;
        }
        catch(Exception ex){

            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "ERRO AO SALAVAR AS TABELAS \n\r"+ex.toString(),"ERRO  12",JOptionPane.ERROR_MESSAGE);
            test=false;
}


        return test;
    }

mais os dados ficao juntos tipo ...

Campo1, Campo2,Campo3...

o quivo XML fica assim...

<list>
- <k__atualizador.CAMPOS>
  <Campos__fornecedor>Campo1, Campo2,Campo3</Campos__fornecedor> 
   <Campos__receptor>Campo1, Campo2,Campo3</Campos__receptor> 
    </k__atualizador.CAMPOS>
  </list>

eu queria atualizar o codigo q tenho para o arquivo XML ficar assim ....

<list>
- <k__atualizador.CAMPOS id=1>
  <Campos__fornecedor>Campo1</Campos__fornecedor> 
   <Campos__receptor>Campo1</Campos__receptor> 
    </k__atualizador.CAMPOS>
<k__atualizador.CAMPOS id=2>
  <Campos__fornecedor>Campo2</Campos__fornecedor> 
   <Campos__receptor>Campo2</Campos__receptor> 
    </k__atualizador.CAMPOS>
  <k__atualizador.CAMPOS id=3>
  <Campos__fornecedor>Campo3</Campos__fornecedor> 
   <Campos__receptor>Campo3</Campos__receptor> 
    </k__atualizador.CAMPOS>
  
  </list>

para que assim eu possa procurar po nome do campo pelo Id ..

outra coisa esse XML e alterado constantemente ... e as vezes se retiram os campos e as vezes aumenta o numero de campos ... mais mesmo continuando com o mesmo numero de campos os nomes sao alterados ...

a classe simples e essa ...!!!

public class CAMPOS {

private String Campos_fornecedor="";
private String Campos_receptor="";

    public String getCampos_fornecedor() {
        return Campos_fornecedor;
    }

    public void setCampos_fornecedor(String Campos_fornecedor) {
        this.Campos_fornecedor = Campos_fornecedor;
    }

    public String getCampos_receptor() {
        return Campos_receptor;
    }

    public void setCampos_receptor(String Campos_receptor) {
        this.Campos_receptor = Campos_receptor;
    }

   

}

tem como fazer o q eu quero ..???
se alguem souber me ajuda ai por favor !!!

15 Respostas

I

Mostra o seu XML e o seu XSD/DTD aí…

K
e esse ai ..!!!
<list>
- <k__atualizador.CAMPOS>
// campos todos juntos como uma unica strinhg 
  <Campos__fornecedor> CAMPOS, CAMPOS1 </Campos__fornecedor> 
  <Campos__receptor> CAMPOS2, CAMPOS3 </Campos__receptor> 
  </k__atualizador.CAMPOS>
  </list>

minha classe java ta gerando esse XML ....
eu queria gerar de outro geito .... por q do geito acima todos os campos ficam alinhados e depois nao tem como separar

<list>
//identificador 1 ou seja 1 campo

- <k__atualizador.CAMPOS id=1>
  <Campos__fornecedor>CAMPOS1</Campos__fornecedor> 
  <Campos__receptor>CAMPOS2</Campos__receptor> 
  </k__atualizador.CAMPOS>

//identificador 2 ou seja 2 campo

<k__atualizador.CAMPOS id=2>
  <Campos__fornecedor>CAMPOS_4</Campos__fornecedor> 
  <Campos__receptor>CAMPOS_3</Campos__receptor> 
  </k__atualizador.CAMPOS>

//identificador 3 ou seja 3 campo

<k__atualizador.CAMPOS id=3>
  <Campos__fornecedor>CAMPOS_5</Campos__fornecedor> 
  <Campos__receptor>CAMPOS_6</Campos__receptor> 
  </k__atualizador.CAMPOS>

  </list>

mais ou menos assim ... com identificador ....
para que eu possa trabahar os campos um a um se for necessário ... expliquei melhor ?????

I

Nunca usei o XStream, mas será que se você criar uma List<HashMap<String,String>> não adianta…

K

estou disposto a ideias como vc faria ???

a eu ja to salvando em uma lista …

mais acontece o seguinte o usuario vai entrar com mais de um campo por ves … conferir …e so depois salvar todos os campos…

ai to colocando em uma lista e salvando a lista no XML …

mais ta ficando como se fosse uma unica string e salvando junto …tipo …

o usuario entra com 3 campos … kkk , hhhh, ppp … ok

ao ives de ficar …

1° campo kkk
2° campo hhhh
3° campo ppp

ta ficando assim …

1° campo kkk,hhhh,ppp

entendeu agora …
queria colocar os campos separados …

e eu tambem nao tenho muito o dominio de

XStream

pra ler os campos estou usando DOM …

e como posso resolver meu problema ???

I

Eu imaginei uma lista de um DE/PARA não sei se vai dar certo, outra coisa que você poderia fazer é colocar um XSD no seu XML, pelo XSD eu acredito que você consiga restringir apenas um nó do XML para cada objeto

K

dei uma aperfeisoada aqui …

to colocando os dados dentro de um vetor …

0[campo]
1[campo2]
2[campo3]

e fasendo ele rodar na quantidade de itens q tem no vetor

so q meu problema continua … que diser mais ou menos a cada vez q passa por um campo do vetor ele e salvo no XML e apaga o utimo

so caso do ex so ta ficando salvo o campo 3 ou senja o …proximo apaga o anterior como posso faser pra salvar todos ??

vou dar uma olhada aqui em XSD e vou ver …!!!

mais o q eu queria e q cada campo do vetor fosse salvo como um no do XML …pra depois pegar os campos a vontade …!!!
se alguem puder me ajudar ai ficaria muito grato …!!!

K

NAO O XSD e como se fosse um XML mesmo …!!!

mais vamos dizer assim mais “aperfeiçoado” … so nao vo mexer com ele por q to custando pra salvar em XML imagina em XSD… ou estou errado e e mais facil ??

I

XSD quer dizer XML Schema Definition, ou seja, como o seu XML vai ser montado, com ele você pode fazer validações, definir como os campos deverão ser formatados, definir tipos simples e complexos de nós, dentre outras características.

K

SIM... SIM...

e q me espresei meio genericamente falando ...hehehe

mais esse e meu problema sem mal mal XML ... e nem tenho noçao de como gravar um arquivo em XSD ... e muito menos ler ..!!!

por isso q queria em XML ...
tipo entrei a um tempo atraz perguntado como salvava arquivos em Xml ... ate q conseguir salvar ... agora ja to salvando e lendo ... masi o vetor ta erado ....

da um ex melhor ..!!!

o meu XML ta assim ....
e tenho q salvar um vetor ... masi minha classe so salva o utimo valor do vetor ...ok

<usuario id="3">  
        <nome>Guilherme Silveira</nome>  
        <idade>20</idade>  
 </usuario>

e quando salva o vetor todo salva assim ..

<guj>  
    <usuario>  
        <nome>Daniel Destro do Carmo,Paulo Silveira,Rafael Steil</nome>  
        <idade>23,22,20</idade>  
    < /usuario>  
</guj>

eu queria que ficase masi ou menos assim ... nao e nada complicado nao .. e que nao to conseguinto alterar minha classe pra fazer isso ..!!

<guj>  
    <usuario id="0">  
        <nome>Daniel Destro do Carmo</nome>  
        <idade>23</idade>  
       </usuario>  
    
    <usuario id="1">  
        <nome>Paulo Silveira</nome>  
        <idade>22</idade>  
      </usuario>  
    
    <usuario id="2">  
        <nome>Rafael Steil</nome>  
        <idade>20</idade>  
     </usuario>  
    
    <usuario id="3">  
        <nome>Guilherme Silveira</nome>  
        <idade>20</idade>  
     </usuario>  
</guj>

entendeu ?? cada espaço do vetor virasse um no com um identificador ..!!

I
kiq095, segue um exemplo em JAXB.... se não funcionar você vai ter que dar uma olhada na documentação...
public class Testando {

	public static void main(String[] args) {
		List<Cadastro> list = new LinkedList<Cadastro>();
		list.add(new Cadastro("Ivan","Rua. X"));
		list.add(new Cadastro("Ryan","Rua. Z"));
		list.add(new Cadastro("Ian","Rua. Y"));

		Cadastro cad = new Cadastro();
		cad.setList(list);
		
		JAXB.marshal(cad, new File("/home/e468735/teste.xml"));
	}
public class Cadastro {

	private String name;
	private String address;
	private List<Cadastro> list;
	
	public Cadastro() {
		super();
	}
	
	public Cadastro(String name,String address) {
		this.name = name;
		this.address = address;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

	public List<Cadastro> getList() {
		return list;
	}

	public void setList(List<Cadastro> list) {
		this.list = list;
	}
}

Resultado

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cadastro>
    <list>
        <address>Rua. X</address>
        <name>Ivan</name>
    </list>
    <list>
        <address>Rua. Z</address>
        <name>Ryan</name>
    </list>
    <list>
        <address>Rua. Y</address>
        <name>Ian</name>
    </list>
</cadastro>
K

ISSO.......!!!!!!!!!!!!!!

VC TA IGUAL A MIM ..........!!!

isso ai e quando vc sabe q vao ser 3 entras ....ou seja Ivan, Ryan, Ian .... assim ta ok ..!!!

mais meu problema e um pouco maior ....

eu nao sei quantas entradas vao ser ..... podem ser 3 .. podem ser 10 ... podem chegar ate 100...

ai no caso vou ter q fazer 100 vezes ??

List<Cadastro> list = new LinkedList<Cadastro>();  
      1  list.add(new Cadastro("Ivan","Rua. X"));   
      2 list.add(new Cadastro("Ryan","Rua. Z"));  
      3 list.add(new Cadastro("Ian","Rua. Y"));  
      4                    .
      5                      .
                            .
      100 list.add(new Cadastro("Kiq","Rua. k"));

e depois ver qual e nulo e qual nao e ... nao tem como fazer tipo um for pra inserir nao ????

tipo

for (int k=0;k<=quantidade;k++){

List<Cadastro> list = new LinkedList<Cadastro>();  

        list.add(new Cadastro(ENTRADA1,ENTRADA2));  
        Cadastro cad = new Cadastro();  
        cad.setList(list);  


}
I

Usa a classe Iterator do Java que por sinal também é um Pattern… dá uma pesquisada sobre Iterator… mas em todo caso,

Iterator<Cadastro> it = list.iterator();
		List<Cadastro> listCadastro = new LinkedList<Cadastro>();
		while(it.hasNext()){

			Cadastro c = it.next();
			if(c != null)
				listCadastro.add(c);
		}
K

ok vou testar aqui …e perquisar aqui …

K

CARA !!!!!!!!

hahaha

travo ate o Netbeans .!!!!!!!
deu um loop aqui muito sinistro !!!!

olha o q eu fiz ai !!!

private void AtualizarActionPerformed(java.awt.event.ActionEvent evt) {                                          
           int num=0;
           int i=0;
           String XML="";
           List xml = new ArrayList();
           List drivers = new ArrayList();
           XStream xstream = new XStream();
           
       if( cont>=0 && CAMPOS_fornecedor !=null && CAMPOS_receptor !=null){

            Iterator<CAMPOS> it = drivers.iterator();

       while(i<=cont){

           while(it.hasNext()){

                CAMPOS Campos=new CAMPOS(CAMPOS_fornecedor[i],CAMPOS_receptor [i]);
               if(c != null)
                xml.add(Campos);
                  }
       
XML=xstream.toXML(xml);

          

 try{
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                bw.write(XML);
                bw.flush();
                bw.close();

                test=true;
        }
        catch(Exception ex){

            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "ERRO AO SALVAR OS CAMPOS \n\r"+ex.toString(),"ERRO  12",JOptionPane.ERROR_MESSAGE);
            test=false;
}
}

MOÇO MAIS O PC TA LENTO ATE AGORA ... !!!!
hehehehe...

to lendo aqui e tentando tambem ..!!!
enquanto isso vou tentar aqui de outro geito !!!!!

K

Fiz de um geito aqui e quase deu certo ...
to colocando uma lista dentro da outra ...

tipo pego valor da posição no vetor e transformo em uma lista ...e essa lista coloco dentro de outra ..

olha ai

private void AtualizarActionPerformed(java.awt.event.ActionEvent evt) {                                          
           int num=0;
           int i=0;
           String XML="";
           List xml = new ArrayList();
           List drivers = new ArrayList();
           XStream xstream = new XStream();
           CAMPOS Campos=new CAMPOS();
       if( cont>=0 && CAMPOS_fornecedor !=null && CAMPOS_receptor !=null){

           
       while(i<=cont){

            num++;
                Campos.setCampos_fornecedor(CAMPOS_fornecedor[i]);
                Campos.setCampos_receptor(CAMPOS_receptor[i]);

                drivers.add(Campos);

                xml.add(drivers);
            i++;
          }
          
            JOptionPane.showMessageDialog(null,xml,"CAMPOS",JOptionPane.INFORMATION_MESSAGE);

            XML=xstream.toXML(xml);

            JOptionPane.showMessageDialog(null,xml,"CAMPOS",JOptionPane.INFORMATION_MESSAGE);
           if(CAMPOS.Salvar(XML,i)){


               JOptionPane.showMessageDialog(null,"TODOS OS "+num+" CAMPOS FORAM ATUALIZADOS ","CAMPOS",JOptionPane.INFORMATION_MESSAGE);
               this.dispose();
         }
       }
      else{

         JOptionPane.showMessageDialog(null,"NOME DOS CAMPOS EM BRANCO OU NULOS  \n\r "+"TENTE INSERIR OS DADOS NOVAMENTE","ERRO  05",JOptionPane.ERROR_MESSAGE);

}

      
 try{
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                bw.write(XML);
                bw.flush();
                bw.close();

                test=true;
        }
        catch(Exception ex){

            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "ERRO AO SALAVAR AS TABELAS \n\r"+ex.toString(),"ERRO  12",JOptionPane.ERROR_MESSAGE);
            test=false;
}
}

ai ta gerando o seguinte XML ..!!

<list>
- <list>
- <k__atualizador.CAMPOS>
  <Campos__fornecedor>UTIMO VALOR 1</Campos__fornecedor> 
  <Campos__receptor>UTIMO VALOR 2</Campos__receptor> 
  </k__atualizador.CAMPOS>

  <k__atualizador.CAMPOS reference="../k__atualizador.CAMPOS" />
 
  <k__atualizador.CAMPOS reference="../k__atualizador.CAMPOS" />
 
  <k__atualizador.CAMPOS reference="../k__atualizador.CAMPOS" /> 
  </list>

  <list reference="../list" />
 
  <list reference="../list" />
 
  <list reference="../list" /> 
  </list>

so ta salvando o utimo valor e savanco a stringa do proximo XML como se fosse uma variavel ..!!

mais to pesquisando aqui .... to quase la ..!!!

Criado 14 de março de 2011
Ultima resposta 15 de mar. de 2011
Respostas 15
Participantes 2