Gerando XML no Java!

16 respostas
elementx

Estou usando AJAX junto com Java mas estou tendo problemas pra gerar um XML no java.

Veja código abaixo:

StringBuffer xml = new StringBuffer("<clientes>");
while (rs.next()) {
   xml.append("<cliente>");
   xml.append("<nome>");
   xml.append("Garcia"); //rs.fldNome)
   xml.append("</nome>");
   xml.append("</cliente>");
}
xml.append("</clientes>");		
response.setContentType("text/xml");
response.setHeader("Cache-Control","no-cache");
//out.println(xml.toString());
response.getWriter().write(xml.toString());

Não reparem o While pq dpois vou buscar os dados em um DB.
Mas rodando esse .jsp não encontro problemas nenhum mas estou tendo o problema maior na saída, no browse mais especificadamente.

Vejam:

A página XML não pode ser exibida 
Não é possível exibir a entrada XML usando a folha de estilos XSL. Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde. 


--------------------------------------------------------------------------------

Em um documento XML  são permitidos elementos de nível superior. Erro ao processar o recurso 'http://localhost:8080/siste...

<body>
-^

Como ele ta gerando tag de HTML se eu coloquei:

response.setContentType("text/xml");

Não era pra sair em XML somente?

O problema é de lógica eu axo ou ta faltando algum comando! Se puderem ajudar, grato desde já!

[]´s,

Garcia.

16 Respostas

agogear

Olha so…
Sempre utilizei o XML DoM… é bem simples de utilizar…

http://www.w3schools.com/dom/default.asp

Tenta ver se ele nao facilita sua vida…

Guerr

Gerar o XML na mão nunca é uma boa prática, pois você não terá muito controle sobre o encoding, namespaces e etc… Tente utilizar a api DOM ou JAXR e depois utilizar uma transformação para gerar o XML (já jogando ele na saída do seu servlet).

Outra coisa: vc falou que o seu código está em um JSP? Tente colocar ele em um servlet…

T

Cara, eu utilizaria o XStream… muito simples…

Rage

O XStream realmente cria a string em formato xml, mas não GERA o arquivo XML.

Estou tendo exatamente este problema, estou usando o XStream para passar para XML dados que possuo numa LinkedList, e ele faz na boa, mas ainda não consegui GERAR o arquivo, ou seja, tenho o conteudo do XML já com as tags e seus respectivos valores, mas não consigo gerar o XML. Alguém sabe como?

elementx

Agradeço a todos pela ajuda!!

Em primeiro gostaria de dizer que estou tendo dificuldades para trabalhar com Servlet!! Não estou conseguindo executa-lo em cima do Tomcat 5.5!
Em versão anticas do tomcat eu consigo sem problemas!
Como por enquanto JSP esta resolvendo meus problemas vou continuar nele! Mas terminando a aplicação, pretendo passar tudo pra servlet!!!

Qto as API´s pra XML ou XJAR eu nunca ouvi falar! Estou procurando maiores informações!!

O problema foi resolvido! Não era gerar o XML e sim exibi-lo!!!!
Estou usando o IE e o sistema vai rodar sobre o IE.
Estou lendo uma lista de nomes do meu DB e qdo tem nomes com acentuação o IE não exibe!!!

Vejam:
StringBuffer xml = new StringBuffer("&lt?xml version='1.0' encoding='utf-8'?&gt");
	if (xStatus == 15 ) { 
		xml.append("<clientes>");
    	while (rs.next()) {

			xml.append("<cliente>");
			
			xml.append("<nome>");
			xml.append(rs.getString("fldNome"));
			xml.append("</nome>");
			
			xml.append("<cpf>");
			xml.append(rs.getString("fldCPF"));
			xml.append("</cpf>");
			
			xml.append("<nascimento>");
			xml.append(rs.getString("fldDataNasc"));
			xml.append("</nascimento>");
			
			xml.append("<ddd>");
			xml.append(rs.getString("fldDDD"));
			xml.append("</ddd>");
			
			xml.append("<telefone>");
			xml.append(rs.getString("fldTelefone"));
			xml.append("</telefone>");
			
			
			xml.append("</cliente>");
		}
		xml.append("</clientes>");		
	}
	if (xStatus == 10) {
   		xml.append("<status>");
		if (rs.next()) {
			xml.append("1");
		} else {
			xml.append("0");
		}
		xml.append("</status>");
	}
	if (xStatus &gt 0) {
		response.setContentType("text/xml");
  		response.setHeader("Cache-Control","no-cache");
		//out.println(xml.toString());
		response.getWriter().write(xml.toString());
	}

Sei que algo falta ai pra informar ao IE que ele pode ler as acentuações.
Coloquei a primeira linha do código e msm assim não são exibidas as linhas!!

Alguém pode ajudar?

PS: Vale lembrar que o código acima funciona perfeitamente!!

Guerr

Tente colocar na primeira linha

StringBuffer xml = new StringBuffer("&lt?xml version='1.0' encoding='ISO-8859-1'?&gt");
Abdon

Utilize a classe Transformer para gerar o xml, não o gere na mão.

Pedrosa

Utilize o Xtream, além de gerar o xml com objetos Java ele diminui o tamanho dos arquivos atraves de referências.

http://xstream.codehaus.org/graphs.html

elementx

Guerr@:
Tente colocar na primeira linha

StringBuffer xml = new StringBuffer("&lt?xml version='1.0' encoding='ISO-8859-1'?&gt");

Valeu cara! Deu certo! Obrigadão!!!

[]´s,

Garcia.

rbamartins

Cara, o XStream ou o JAXB da propria sun geram o XML a partir do objeto java, e tanto um quano o outro fazem o reverso também.

http://xstream.codehaus.org/tutorial.html veja ai, muito bom. pratico, elegante e rapido

abraços

Guerr

rbamartins:
Cara, o XStream ou o JAXB da propria sun geram o XML a partir do objeto java, e tanto um quano o outro fazem o reverso também.

http://xstream.codehaus.org/tutorial.html veja ai, muito bom. pratico, elegante e rapido

abraços

Apesar de ter te passado a solução, eu concordo 100% com o Rafael! Usando o JAXB, por exemplo, você poderia rabalhar diretamente com objetos sem preocupar com sua serialização para XML. Talvez somente para esta página não é algo que vale a pena ser mudado, mas se você vai desenvolver funcionalidades parecidas para outros objetos, vai aumentar bastante sua produtivdade e diminuir seu trabalho braçal!

bsl.lacerda

Pessoal, aproveitando o tópico, é o seguinte.
Estou dando uma olhada em Spring WS e me veio a necessidade de gerar os XMLs e os XSDs referente aos meus objetos já que pelo que eu vi o S WS utiliza o conceito de geração do contrato do WS (WSDL) primeiro.
O problema é o seguinte:
Dada a classe:

@XmlRootElement( name = "holiday" )
@XmlAccessorType( XmlAccessType.FIELD )
public class Holiday {
	
	@XmlElement( required = true )
	private Date startDate;
	
	@XmlElement( required = true )
	private Date endDate;
	
	public Date getStartDate() {
		return startDate;
	}
	public void setStartDate(Date startDate) {
		this.startDate = startDate;
	}
	public Date getEndDate() {
		return endDate;
	}
	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

}

Gostaria de gerar um xml que a representasse, tipo:

<Holiday xmlns="http://mycompany.com/hr/schemas">
    <StartDate>2006-07-03</StartDate>
    <EndDate>2006-07-07</EndDate>
</Holiday>

Mas não sei se tem como.

Alguém poderia me ajudar?
Valeu!

paulofernandesjr

http://www.guj.com.br/posts/list/119053.java

abraço

bsl.lacerda

Valeu, testei o Xstream de acordo com o que você recomendou e consegui gerar o XML.
Também consegui gerar o XML a partir do XSD criado com o JAXB por dentro do Eclipse (Menu de contexto > Generate)

Valeu Pessoal!!!

fidelis_felipe

Pessoal, minha dúvida é o seguinte, tenho a seguinte classe:

public class TesteXStream {
	
	public static void main(String[] args) {
		// Criando um objeto XStream
		XStream xstream = new XStream(new DomDriver());

		// Criando alguns dados
		Pessoa vinci = new Pessoa();
		vinci.setNome("Vinci Pegoretti Amorim");
		vinci.setEmail("[email removido]");
		Telefone foneDoVinci = new Telefone();
		foneDoVinci.setDdd(55);
		foneDoVinci.setNumero("5555 5555");
		vinci.setFoneComercial(foneDoVinci);
		List contatos = new ArrayList(1);
		contatos.add(vinci);

		// Passando os dados de Objetos Java para XML
		String contatosEmXML = xstream.toXML(contatos);

		System.out.println("\nContatos em XML:");
		System.out.println(contatosEmXML);

		// Passando os dados de XML para Objetos Java
		List amigos = (List) xstream.fromXML(contatosEmXML);
		Pessoa amigo = (Pessoa) amigos.get(0);
		Telefone foneDoAmigo = amigo.getFoneComercial();

		System.out.println("\nAmigo como Objeto Java:");
		System.out.println("Nome: " + amigo.getNome());
		System.out.println("Fone Comercial: (" + foneDoAmigo.getDdd() + ") "+ foneDoAmigo.getNumero());
		
				
	}
}

Onde sua saida foi :

Contatos em XML:
<list>
<br.com.readerxml.Pessoa>
<nome>Vinci Pegoretti Amorim</nome>
<email>[email removido]</email>
<foneComercial>
<ddd>55</ddd>
<numero>5555 5555</numero>
</foneComercial>
</br.com.readerxml.Pessoa>
</list>

Amigo como Objeto Java:
Nome: Vinci Pegoretti Amorim
Fone Comercial: ([telefone removido]

Minha dúvida é como faço pra poder salvar o sam.xml em uma pasta específica no meu projeto e ler depois?

thiagocfn

rbamartins:
Cara, o XStream ou o JAXB da propria sun geram o XML a partir do objeto java, e tanto um quano o outro fazem o reverso também.

http://xstream.codehaus.org/tutorial.html veja ai, muito bom. pratico, elegante e rapido

abraços


Muito boa a dica!

recomendo! :smiley:

Criado 14 de março de 2007
Ultima resposta 22 de ago. de 2012
Respostas 16
Participantes 12