pensar como fazer isso? Criar uma String gigante concatenando valores e tags? Hoje em dia nao ha necessidade de se utilizar metodos tao "complexos" assim. Existe uma biblioteca chamada de XStream, onde objetos podem ser transformados em XML, e vice versa.Obs: o XStream gera uma String em formato de XML, e nao o arquivo XML propriamente dito, mas este e gerado com a ajuda do FileOutputStream do Java.Entao para fazer este exemplo vamos precisar de dois .jar, um e do proprio XStream e o outro e o Dom4J. Para baixar os dois juntos, clique aqui.Estrutura do projetoNosso projeto ira ficar com essa estrutura:Depois de muito tempo venho editar esta postagem sobre XStream...Dentro do pacote model temos duas classes, um e o Endereco e a outra e Pessoa.Classe Endereco:@XStreamAlias("endereco")public class Endereco { private String rua; private String cidade; //gettters e setters}A anotacao @XStreamAlias e necessaria quando vai fazer a leitura de uma String XML.A Classe Pessoa:public class Pessoa { private String nome; private String cpf; private List<Endereco> enderecos; //getters e setters}Bom agora vamos ver o que desejamos fazer e como fazer... Vamos comecar pelo mais simples, caso queira gerar um XML de um endereco que esta dessa forma:<endereco> <rua>Rua das araras</rua> <cidade>Primavera do Leste</cidade></endereco>Eu preciso do seguinte codigo:private static void gravaEndereco() { Endereco endereco = new Endereco(); endereco.setCidade("Primavera do Leste"); endereco.setRua("Rua das araras"); XStream xStream = new XStream(); xStream.alias("endereco", Endereco.class); File arquivo = new File("endereco.xml"); FileOutputStream gravar; try { gravar = new FileOutputStream(arquivo); gravar.write(xStream.toXML(endereco).getBytes()); gravar.close(); } catch (IOException ex) { ex.printStackTrace(); } }Lembrando que a parte de gravar o arquivo nao e do XStream, a String e gerada pelo seguinte codigo: xStream.toXML(endereco), o mesmo vale para os proximos metodos...Agora caso queira gravar uma lista de enderecos em XML, que fique dessa forma:<enderecos> <endereco> <rua>Rua abc</rua> <cidade>Cuiaba</cidade> </endereco> <endereco> <rua>Avenida Sao Joao</rua> <cidade>Primavera do Leste</cidade> </endereco></enderecos>E necessario o seguinte metodo:private static void gravaListaEndereco() { List<Endereco> enderecos = new ArrayList<Endereco>(); Endereco e1 = new Endereco(); e1.setCidade("Cuiaba"); e1.setRua("Rua abc"); enderecos.add(e1); Endereco e2 = new Endereco(); e2.setCidade("Primavera do Leste"); e2.setRua("Avenida Sao Joao"); enderecos.add(e2); XStream xStream = new XStream(); xStream.alias("enderecos", List.class); xStream.alias("endereco", Endereco.class); File arquivo = new File("enderecos.xml"); FileOutputStream gravar; try { gravar = new FileOutputStream(arquivo); gravar.write(xStream.toXML(enderecos).getBytes()); gravar.close(); } catch (IOException ex) { ex.printStackTrace(); } }Agora vamos ver algo mais complicado, que e gravar objetos que contenham listas dentro dele... ou seja vamos criar um XML que represente uma lista de pessoas (nosso model la do inicio):<pessoas> <pessoa> <nome>Andii</nome> <cpf>123.123.123-34</cpf> <enderecos> <endereco> <rua>Rua 123</rua> <cidade>Primavera do Leste</cidade> </endereco> </enderecos> </pessoa> <pessoa> <nome>Maria</nome> <cpf>345.656.235-98</cpf> <enderecos> <endereco> <rua>Avenida das flores</rua> <cidade>Cuiaba</cidade> </endereco> <endereco> <rua>Rua das abelhas</rua> <cidade>Cuiaba</cidade> </endereco> </enderecos> </pessoa></pessoas>Para gerar esta estrutura precisamos o seguinte metodo:private static void gravaListaCompleta() { Pessoa pessoa1 = new Pessoa(); pessoa1.setNome("Andii"); pessoa1.setCpf("123.123.123-34"); Endereco endereco1 = new Endereco(); endereco1.setCidade("Primavera do Leste"); endereco1.setRua("Rua 123"); List<Endereco> enderecos1 = new ArrayList<Endereco>(); enderecos1.add(endereco1); pessoa1.setEnderecos(enderecos1); Pessoa pessoa2 = new Pessoa(); pessoa2.setNome("Maria"); pessoa2.setCpf("345.656.235-98"); Endereco endereco2 = new Endereco(); endereco2.setCidade("Cuiaba"); endereco2.setRua("Avenida das flores"); Endereco endereco3 = new Endereco(); endereco3.setCidade("Cuiaba"); endereco3.setRua("Rua das abelhas"); List<Endereco> enderecos2 = new ArrayList<Endereco>(); enderecos2.add(endereco2); enderecos2.add(endereco3); pessoa2.setEnderecos(enderecos2); List<Pessoa> pessoas = new ArrayList<Pessoa>(); pessoas.add(pessoa1); pessoas.add(pessoa2); XStream xStream = new XStream();