Geração de XML simples com DOM

Bom dia Pessoal, me foi passado um exercio, onde, por meio da API DOM, deveria gerar um XML e ler os valores do mesmo, pois bem, o XML, é o seguinte


<root>
	
	<colaborador id="1">
		<nome>Atanael</nome>
		<idade>20</idade>
	</colaborador>
		
	<colaborador id="2">
		<nome>Josemar</nome>
		<idade>21</idade>
	</colaborador>
	
</root>

Então , comecei minhas pesquisar e montei o codigo para cria-lo:


public class Teste {

	/**
	 * @param args
	 * @throws ParserConfigurationException 
	 */
	public static void main(String[] args) throws ParserConfigurationException {
		
	try {
		
		Coloborador um = new Coloborador();
		um.setId(1);
		um.setIdade(20);
		um.setNome("Atanael");
		
		Coloborador dois = new Coloborador();
		dois.setId(2);
		dois.setIdade(21);
		dois.setNome("Josemar");
		
		ArrayList<Coloborador> coloboradors = new ArrayList<Coloborador>();
		coloboradors.add(um); 
		coloboradors.add(dois);
		
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		
		Document doc = db.newDocument();
		Element elemRoot = doc.createElement("root");
		doc.appendChild(elemRoot);
		
		for (Coloborador c : coloboradors){
			
			Element em = doc.createElement ("colaborador");
			em.setAttribute("id",String.valueOf(c.getId()));
			elemRoot.appendChild(em);
		        Element emN = doc.createElement("nome");
			emN.appendChild(doc.createTextNode ( c.getNome() ));
			Element emI = doc.createElement("idade");
			emI.appendChild(doc.createTextNode (String.valueOf(c.getIdade())));
			em.appendChild(emN);
			em.appendChild(emI);
					
		}
			
		TransformerFactory transformerFactory = TransformerFactory.newInstance () ;
		Transformer transformer = transformerFactory.newTransformer () ;
		DOMSource source = new DOMSource ( doc ) ;
		StreamResult result = new StreamResult (new File ("C:\\wamp\\www\\XML\\src\\xmlcomdom.xml")) ;
		transformer.transform ( source, result ) ;
		
		
		
				   
	}
	
	 catch (TransformerException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	catch (ParserConfigurationException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
		

	}

}

Dai, ele até gera, so que ele gera dessa forma :

<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><colaborador id="1"><nome>Atanael</nome><idade>20</idade></colaborador><colaborador id="2"><nome>Josemar</nome><idade>21</idade></colaborador></root>

sem identação, sem quebra de linha, sem nada, em uma unica linha continua…

alguém sabe se tem algum metodo que faz essa “formatação”? Ou é gerado assim mesmo e não adianta?

Obrigado!

Bom dia,

Entre no site da loiane , que existe alguns artigos e exemplos dado por ela , explicando o conceito sobre DOM, boa sorte …

http://www.loiane.com

Mesmo abrindo em um browser (firefox, IE, …) ele abre assim sem formatação?

romarcio, aah, verdade, nao tinha testado lá, la abre belezura! Só pelo proprio eclipse que ele abre zuadinho

Bom , nesse site que Aleksandro indicou, li isto:

[quote]Bem, já vimos como remover, modificar e adicionar elementos ao XML. Agora falta apenas gravar o arquivo modificado em algum lugar!
Se desejar, pode criar uma classe para montar o XML na mão, ou seja, montar as tags, identação, etc. Mas tem que tomar muito cuidado quando for fazer isso, pois pode acabar modificando a estrutura na serialização (sem querer), e o XML pode ficar inválido.

Uma maneira que muitos desenvolvedores utilizam é criar uma transformação identidade, ou seja, é uma transformação XSL sem folha de estilo.
Você cria uma origem (documento DOM) e um destino (arquivo XML), e aplica a transformação sem folha de estilo.[/quote]

Então pelo jeito eh isso mesmo, se eu quiser bontinho, redondo, so criando uma classe pra fazer isso…

Obrigado galera!

EDIT:

Achei esses dois metodos:

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, “yes”);
transformer.setOutputProperty(OutputKeys.INDENT, “yes”);

Para ser usado no transformador “TransformerFactory transformerFactory = TransformerFactory.newInstance () ;
Transformer transformer = transformerFactory.newTransformer () ;”

O primeiro faz com que aquela primeira linha com as caracteristicas do xml nao seja gerada, e a segunda, aplica um estilosinho, nada sofisticado, apenas quebra as linhas, sem identação, mas ja melhora o visual.