Lendo o XML com JSP

27 respostas
S

Ola pessoal…td legal??
Preciso de uma ajuda…estou precisando ler um xml e exibir o resultado na página… gostaria q fosse em jsp …
Eu nao sei como fazer isso e gostaria da ajuda de você… alguem pode passar um exemplo prático…ou então um tutorial…enfim.

ou explicar como eu faço, eu consegui fazer pra ler o xml mais nao sei como exibir o resultado na pagina jsp.

27 Respostas

renzonuccitelli

http://jcoltrane.sf.net/index_pt.html

renzonuccitelli

Ué, se vc já conseguiu ler o XML, basta armazenar essas informações, por exemplo em um bean, e então construir uma JSP. Se for uma JSP básica, vc poder ver exemplos de construção no Deitel…

S

Sim eu fiz isso para ler o xml, so nao sei se ta certo, e nao sei como enviar as informaçoes para uma pagina jsp para exibir para o cliente.

try {

		StringBuilder xml  = new StringBuilder();

==> pagina do xml [color=red] URL url = new URL(“http://xml.mercadolivre.com.br/jm/categsXml?as_site_id=MLB”);[/color]
URLConnection conn = url.openConnection();

BufferedReader br = new BufferedReader( new InputStreamReader( conn.getInputStream() ) );
		String linha;
	
		while ( ( linha = br.readLine() ) != null )
			xml.append(linha);
	
		br.close();
		
	} catch (Exception ex) {
		ex.printStackTrace();
	}
renzonuccitelli

Cara, acho que depende então com o que vc quer dizer ler o xml. Do jeito que vc está fazendo, vc está lendo o documento xml simplesmente. O link que passei faz o parsing do xml. Se vc não sabe o que é parsing, dê uma procurada na net. Agora se realmente vc quer apenas mostrar o xml bruto no navedor, acho que basta vc setar uma página JSP e com a String que vc construiu em seu corpo. Só não sei qual o esquema para ela ignorar as tags do XML…

S

Ok , deixa eu começar novamente,

eu estou desenvolvendo um piloto de busca onde eu vou da um GET e ter um response de um xml de um servido de outra empresa, realmente e um parser que irei fazer, irei receber o xml e irei tratar esse Xml e exibir para o cliente como resultado da busca dele, entendeu ? e isso que quero fazer . mais to perdido, pode me da uma ajuda nisso.

renzonuccitelli

Então primeira coisa: vc tem que fazer o parsing. Para isso, eu indico o JColtrane que tem tutorial em português. Mas vc pode também usar o SAX ou o Extream ou outro parser de sua preferência
Segundo: No processo de parsing vc vai setar as propriedade de uma classe sua, poderia ser um bean com getters e setter dos seus atributos. Assim, vc vai ter que conhecer a estrutura do XML que vc vai fazer o parsing. Nesse processo, vc vai setando as propriedade de uma instancia de seu bean.
Terceiro: com a instancia do Bean possuindo todas suas propriedades setadas, vc usa para mostrar na sua página JSP ou em qualquer outro tipo de interface, até mesmo swing…
A parte do parser eu posso te ajudar bastante, basta vc me dizer qual a estrutura do XML. Pelo que pude ver, o XML trata das caracteristicas de um produto…

S

Sim , trata sim, o xml e esse que esta no codigo, do mercado livre. entao vamos la, e muito obrigado por me ajudar. bom, e isso que ti falei, vo receber esse xml, e disponibilizar para o cliente em uma pagina jsp,

1º como eu recebo esse xml ? e por esse codigo acima que mostrei. vc teria exemplo.

2º como eu disponibilizo isso no jsp. ?

=D

S

A como eu add o JColtrane no meu projeto, tem que instalar, vei o jar. e so add no classpath. ou tem mais coisa.

renzonuccitelli

Baixa ele, dezipa e dentro dele tem um jar chamado JColtrane. Basta usar o Jar. Tem tb o código fonte, mas no seu caso precisa só do jar mesmo…

renzonuccitelli

Então, vc precisa conhecer a estrutura do XML, quais são seu elementos, os atributos de seus elementos e etc. Pega um xml deles e coloca aqui de exemplo. Será que eles fornecem uma documentação sobre o XML?

S

Bom esse a uma parte dele, pq nao da pra colocar tudo pq e muito grande.

<?xml version="1.0" encoding="ISO-8859-1" ?> 
  <!DOCTYPE response (View Source for full doctype...)> 
- <response type="categories_listing" generation_date_gmt="Fri, 12 Dec 2008 14:42:18 GMT">
  <copyright>Copyright © 1999-2008 MercadoLibre S.A.</copyright> 
  <url>http://www.mercadolivre.com.br/jm/categsXml?as_site_id=MLB</url> 
- <categories site="MLB">
- <category id="1051" adult="N" name="Celulares e Telefonia">
- <category id="3813" adult="N" name="Acessórios para Celulares">
- <category id="7466" adult="N" name="Adaptadores USB">
  <category id="7463" adult="N" name="Bluetooth" /> 
  <category id="7508" adult="N" name="Infravermelho/irda" /> 
  <category id="10548" adult="N" name="Outros" /> 
  </category>
  <category id="5099" adult="N" name="Antena e Amplificador de Sinal" /> 
- <category id="3812" adult="N" name="Baterias">
  <category id="39043" adult="N" name="Gradiente" /> 
  <category id="3817" adult="N" name="LG" /> 
  <category id="3814" adult="N" name="Motorola" /> 
  <category id="3815" adult="N" name="Nokia" /> 
  <category id="4186" adult="N" name="Palm Treo" /> 
  <category id="48516" adult="N" name="Pantech" /> 
  <category id="3818" adult="N" name="Samsung" /> 
  <category id="3819" adult="N" name="Siemens" /> 
  <category id="3816" adult="N" name="Sony Ericsson" /> 
  <category id="3820" adult="N" name="Outros" /> 
  </category>
- <category id="5080" adult="N" name="Cabos">
  <category id="11350" adult="N" name="Gradiente" /> 
  <category id="48588" adult="N" name="HTC" /> 
  <category id="7513" adult="N" name="LG" /> 
  <category id="6821" adult="N" name="Motorola" /> 
  <category id="6822" adult="N" name="Nokia" /> 
  <category id="6824" adult="N" name="Outros" /> 
  <category id="48517" adult="N" name="Palm Treo" /> 
  <category id="11353" adult="N" name="Pantech" /> 
  <category id="6820" adult="N" name="Samsung" /> 
  <category id="6823" adult="N" name="Siemens" /> 
  <category id="11346" adult="N" name="Sony Ericsson" /> 
  </category>
  <category id="39109" adult="N" name="Canetas" /> 
- <category id="5095" adult="N" name="Capas e Suportes">
- <category id="48536" adult="N" name="Blackberry">
  <category id="48667" adult="N" name="Acrílico" /> 
  <category id="48668" adult="N" name="Couro" /> 
  <category id="48669" adult="N" name="Gel" /> 
  <category id="48670" adult="N" name="Metal" /> 
  <category id="48671" adult="N" name="Outros" /> 
  <category id="48672" adult="N" name="Películas Protetoras" /> 
  <category id="48673" adult="N" name="Silicone" /> 
  </category>
- <category id="11382" adult="N" name="Gradiente">
  <category id="48674" adult="N" name="Acrílico" /> 
  <category id="48675" adult="N" name="Couro" /> 
  <category id="48676" adult="N" name="Gel" /> 
  <category id="48677" adult="N" name="Metal" /> 
  <category id="48678" adult="N" name="Outros" /> 
  <category id="48679" adult="N" name="Películas Protetoras" /> 
  <category id="48680" adult="N" name="Silicone" /> 
  </category>
- <category id="48569" adult="N" name="HTC">
  <category id="48681" adult="N" name="Acrílico" /> 
  <category id="48682" adult="N" name="Couro" /> 
  <category id="48683" adult="N" name="Gel" /> 
  <category id="48684" adult="N" name="Metal" /> 
  <category id="48685" adult="N" name="Outros" /> 
  <category id="48686" adult="N" name="Películas Protetoras" /> 
  <category id="48687" adult="N" name="Silicone" /> 
  </category>
renzonuccitelli

Vou construir um exemplo didático e já posto aqui…

S

opss, desculpe, vamos começar di novo
vamos usar esse

<?xml version="1.0" encoding="UTF-8"?> 

<beanDescriptor> 

      <line> 

            <property  mandatory="true" > 

            body of the property 

            </property > 

      </line> 

</beanDescriptor>

agora esse xml sera mandado por uma url de um servido de outra empresa onde vou receber e tratalo. como ficaria.

renzonuccitelli

Primeiro: xml base. inventei um que tem a seguinte estrutura:

<?xml version="1.0" encoding="UTF-8"?>

<produto nome="Cartão SD" preco="9.99">
	<descricao> Esse cartão é muito bom e bla bla bla
	</descricao>
</produto>

Segundo: Criei um bean simples que vai conter as propriedades de meu interesse:

public class Produto {
	private String nome;
	private String descricao;
	private float preco;
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public float getPreco() {
		return preco;
	}
	public void setPreco(float preco) {
		this.preco = preco;
	}

}

Terceiro: Escrevi a classe que vai fazer a tradução do do xml para minha classe:

public class LeitorXML {
	private Produto produto;
	
	public LeitorXML(){
		produto=new Produto();
	}
	
	@StartElement(tag="produto")
	private void lerNomeEPreco(@Attribute("nome") String nome,@Attribute("preco") Float preco){
		produto.setNome(nome);
		produto.setPreco(preco);
	}
	
	@EndElement(tag="descricao")
	private void lerDescricao(@Body(tab=false) String descricao){
		produto.setDescricao(descricao);
	}
	
	public Produto getProduto(){
		return produto;
	}
	

}

Quarto:Recebo o inputStream e realizo o parsing:

public class LeitorXMLTeste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SAXParser parser=null;
		try {
			parser= SAXParserFactory.newInstance().newSAXParser();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}

		File file=new File("D:\\workspace\\Teste\\src\\produto.xml");
		if(parser!=null){
			InputSource input=new InputSource(file.getAbsolutePath());//aqui vc pode passar o seu inputStream como parametro
			try {
				LeitorXML leitor= new LeitorXML();
				parser.parse(input,new JColtraneXMLHandler(leitor));
				Produto p=leitor.getProduto();
				System.out.println("nome: "+p.getNome());
				System.out.println("preço: "+p.getPreco());
				System.out.println("descricao: "+p.getDescricao());
			} catch (SAXException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

Repare entao que eu recuperei os dados do produto e imprimi na tela. Em vez de imprimir na tela, vc poderia colocar em sua pagina. Eu usei um arquivo, mas vc pode usar um inputStream no InputSource.
Vê se vc consegue estender esse exemplo para o que vc quer fazer...

renzonuccitelli

AH, qdo rodei o teste, obtive o seguinte resultado:

nome: Cartão SD
preço: 9.99
descricao: Esse cartão é muito bom e bla bla bla

que é exatamente o que eu queria…

S

Entendi sim hehehehe, mais lembrando que eu vou receber esses xml de uma url. eu posso passar a url no lugar do arquivo onde esta o documento de xml. ?

renzonuccitelli

url acho que nao, mas ele aceita o InputStream, entao vc passa o InputStream do jeito que vc tava fazendo no início do post…
Deixei essa parte até comentada na classe LeitorXMLTest…

S

blz, vo tentar fazer assim e vo ver no que da e ja falo, detalhe, o jcoltrane eu nao consegui colocar pra rodar nao, eu fui la no run e add o jar dele no classpath, e nao fez nada nao mudar, absolutamente, nada, tem algo mais a se fazer para instalar.

S

heheheheh, foi vc que desenvolveu o Jcoltrane , legal, parabens, me parece muito bom, mais como eu faço pra criar um projeto ou documento coisa parecida com ele , para que eu possa desenvolver essa aplicaçao que vc ta me explicando. abraços.

renzonuccitelli

Vc por acaso dezipou o arquvo que recebeu? tem que dezipar e pegar o jar que está la dentro. Na duvida, to mandando o Jar anexo

renzonuccitelli

Pois é, tb to vendendo meu peixe…hehe. Mas então, coloquei o Jar aí pra vc baixar, basta adicionar ele no seu projeto, colocando ele no ClassPath…

renzonuccitelli

Tb se certifique de estar usando JVM 5 ou superior…

S

heheheheh
entao torce pra essa aplicação dar certo cara, essa aplicação que to trabalhando e para o C.E.S.A.R centro de estudos de sistemas avançados do recife. a minha bronca e que nunca fiz esse parce antes e to levando um pau danado. pra fazer , hehehe pode deixar que vo divulgar sua tecnologia aqui . =D ja baixei e ja coloquei na aplicação o problema agora e o que ti falei , eu vo reseber o xml de uma url e nao sei como disponibilizar isso em uma pagina jsp se voce souber e puder me da uma mao, agradeço. abraços.

renzonuccitelli

Então cara, eu já te mostrei o exemplo de passar os dados para uma classe comum java, basta vc utilizar esses dados para mostrar na JSP do jeito que vc kiser. Basta vc pegar um exemplo simples no próprio Deitel que da pra fazer. Vou almoçar agora, se vc nao conseguir, vou ver se consigo fazer um exemplo simples pra isso.

S

blz, qualquer coisa eu posto aqui novamente. abraços e obrigado.

S

Nao deu nao cara, vc pode me dar um exemplo. ? =[ para mostrar na tela de uma jsp, e juro que nao ti pertubo mais

S

Cara voce poderia me ajudar a criar um codigo, em Dom para da um request, num servido para me retorna um xml.?

Criado 12 de dezembro de 2008
Ultima resposta 12 de dez. de 2008
Respostas 27
Participantes 2