Download de um xml

32 respostas
S

Galera to com um problema, eu tenho uma url que me retorna um xml, eu quero salvar esse xml em um arquivo alguem poderia me ajudar ? um codigo de exemplo. =[ por favor.

32 Respostas

T

Tanto faz se é um arquivo XML ou não, use java.net.URLConnection para conseguir obter os dados.

Como não sei se você precisa obter esse arquivo via POST ou GET, não vou dar muitos detalhes; basta procurar por URLConnection que você vai achar muitos exemplos. Procure primeiro em exampledepot.com.

S

voce teria um codigo em exemplo onde eu poderia fazer isso.

renzonuccitelli

Fala snonca, ainda não conseguiu safar esse download? hehe

renzonuccitelli

Veja se esse link te ajuda. Flws

S

fala renzo,

hehehehehe, ta igual a minha sogra quando pega no pé nao sai mais, heheheheh, pois e cara , ta complicado isso, de mais msm, ja to puto por nao consegui fazer isso, mais vo da uma olha no link sim, valeww

renzonuccitelli

Passa o link do xml que vc está tentando baixar, assim eu tento fazer por aqui tb…

S

o link e esse, eu tenho que baixar ele e salvar em um arquino na minha maquina, ai eu vo usar o parser que vc me mandou lendo o arquivo salvo. entendo ?

o link e esse

S

link errado.

e esse aqui

S

vv

renzonuccitelli

Olha aí a classe. Como eu já tinha te dito um tempo atrás, vc só precisava passar um InputStream como argumento. Olhá aí:

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();
		}

		
		if(parser!=null){
			
			try {
				URL url=new URL("http://pilotos.aileader.com.br/pietro/select?q=pol...llcats=0&ling=none&wt=standard");			
				InputSource input=new InputSource(url.openStream());//aqui vc pode passar o seu inputStream como parametro
				
				
				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();
			}
		}

	}

}
public class LeitorXML {
	private Produto produto;
	
	public LeitorXML(){
		produto=new Produto();
	}
	
//	@StartElement
//	private void lerNomeEPreco(@CurrentBranch String brunch){
//		System.out.println(brunch);
//	}	
	@EndElement
	private void lerDescricao(@CurrentBranch String brunch,@Body String descricao){
		System.out.println(brunch);
		System.out.println(descricao);
	}
	
	public Produto getProduto(){
		return produto;
	}
	

}

Mas uma coisa eu nao entendi, quando pego o xml via Java, os dados são diferentes daquele que vejo quando coloco a url no meu browser. e isso eu já não entendi pq...

renzonuccitelli

Talvez a obtenção seja via POST e nao GET como o thingol falou…

S

esse xml nada mais e do que retorno, de um busca que o cliente faz numa pagina igual a do google, quando o cliente faz a busca, vem o html, mais eu estou buscando o xml dos resultados.

renzonuccitelli

Bom, se o fato é que a classe está fazendo o parser do XML que a URL está retornando, então ve aí se isso supre sua necessidade…

renzonuccitelli

Vi o erro aki, o link ficou comprimido no Guj, entao olha aí a classe corrigida:

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();
		}

		
		if(parser!=null){
			
			try {
				URL url=new URL("http://pilotos.aileader.com.br/pietro/select?q=politica&allcats=0&ling=none&wt=standard");			
				InputSource input=new InputSource(url.openStream());//aqui vc pode passar o seu inputStream como parametro
				
				
				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();
			}
		}

	}

}

Espero que agora vc safe isso logo

S

vc fez, os system.out.print daquela xml que vc criou, como ficaria os parametros desse xml que ti passei ?

S

vc consegue entender a estrutura desse xml ?

renzonuccitelli

A última classe que coloquei no post faz praticamente um println…

renzonuccitelli

Me diz o que vc quer do XML, não seriam os códigos dos pilotos?

S

o Arquivo e o Texto, que seria os pilotos.

S

essa e a pagina retornada em html,

http://pilotos.aileader.com.br/cepe/isearch.jsp?start=0&rows=10&q=governador&allCategory=0&facet.field=taxonomy_l1_s&currentTaxonomy=&fq=

aquele xml e essa pagina.

S

http://pilotos.aileader.com.br/cepe/isearch.jsp?start=0&rows=10&q=pernambuco&allCategory=0&facet.field=taxonomy_l1_s&currentTaxonomy=&fq=

renzonuccitelli

O que vc quer dizer com arquivo e texto? explique melhor, se não fica difícil te ajudar…

S

arquivo e a url ta, esse link que passei agora ele e nada mais que o xml dessa pagina ai que ta postada,

como e a estrutura desse xml pra min colocar aqui no codigo , qual texto vai aparecer na minha pagina.

S

na quele parser que vc me enviou com as informações do seu xml, tinha preço , nome , descrição, no meu xml, tenho que retorna os arquivos e texto, mais nao funciona.

S

como seria o parser com esse xml que ti passei ? =[

renzonuccitelli

Olha, vc tem que se informar de como estão distribuidas as informações que vc quer nesse xml. Eu considerei como arquivo as informações .jpg que estão no XML e texto a informação do .rtf que estão no texto. Assim eu escrevi a seguinte classe:

public class LeitorXML {
	private Produto produto;
	
	public LeitorXML(){
		produto=new Produto();
	}
	
	@BeforeElement(tag="arr",attributes=@ContainAttribute("ctrl##page_path"), elementDeep=1)
	@EndElement(tag="str")
	private void lerPathFoto(@CurrentBranch String brunch,@Body String descricao){
		System.out.println(brunch);
		System.out.println(descricao);
	}
	
	
	@BeforeElement(tag="arr",attributes=@ContainAttribute("ctrl##rtf_file_path"), elementDeep=1)
	@EndElement(tag="str")
	private void lerPathArquivo(@CurrentBranch String brunch,@Body String descricao){
		System.out.println(brunch);
		System.out.println(descricao);
	}
	public Produto getProduto(){
		return produto;
	}
	

}

Ela retorna o seguinte resultado:

/response/lst/lst/arr/str/
00000002/00000052/00000052.rtf
/response/lst/lst/arr/str/
435555535\1219956710306.jpeg
/response/lst/lst/arr/str/
00000002/00000108/00000108.rtf
/response/lst/lst/arr/str/
436634053\1219956726073.jpeg
/response/lst/lst/arr/str/
00000001/00000019/00000019.rtf
/response/lst/lst/arr/str/
409046350\1219956639838.jpeg
/response/lst/lst/arr/str/
00000001/00000020/00000020.rtf
/response/lst/lst/arr/str/
409700015\1219956640712.jpeg
/response/lst/lst/arr/str/
00000001/00000021/00000021.rtf
/response/lst/lst/arr/str/
409702780\1219956640963.jpeg
/response/lst/lst/arr/str/
00000001/00000022/00000022.rtf
/response/lst/lst/arr/str/
409704857\1219956641213.jpeg
/response/lst/lst/arr/str/
00000002/00000107/00000107.rtf
/response/lst/lst/arr/str/
436631861\1219956725776.jpeg
/response/lst/lst/arr/str/
00000003/00000081/00000081.rtf
/response/lst/lst/arr/str/
441221811\1219956775009.jpeg
/response/lst/lst/arr/str/
00000003/00000133/00000133.rtf
/response/lst/lst/arr/str/
442205846\1219956787088.jpeg
/response/lst/lst/arr/str/
00000003/00000134/00000134.rtf
/response/lst/lst/arr/str/
442228719\1219956787306.jpeg

mas então, eu não sei se ele mostra esse conteudo buscando nesses arquivos, então vc terá que se informar sobre isso e sobre como as informações estão dispostas no XML.

S

tudo que estiver em ctrl nao deverar aparecer apenas os que estao como show#texto e show#arquivo =D

vc tirou muito duvida minha =D

S

entendeu ?

renzonuccitelli

Olha aí a classe com duas pequenas alterações:

public class LeitorXML {
	private Produto produto;
	
	public LeitorXML(){
		produto=new Produto();
	}
	
	@BeforeElement(tag="arr",attributes=@ContainAttribute("show##Texto.*"), elementDeep=1)
	@EndElement(tag="str")
	private void lerPathTexto(@CurrentBranch String brunch,@Body String descricao){
		System.out.println(brunch);
		System.out.println(descricao);
	}
	
	
	@BeforeElement(tag="arr",attributes=@ContainAttribute("show##Arquivo.*"), elementDeep=1)
	@EndElement(tag="str")
	private void lerPathArquivo(@CurrentBranch String brunch,@Body String descricao){
		System.out.println(brunch);
		System.out.println(descricao);
	}
	public Produto getProduto(){
		return produto;
	}
	

}

Resultado da execução:

/response/lst/lst/arr/str/
de se ampliar as ações da Política Industrial, de modo a considerar não somente as ações vinculadas
/response/lst/lst/arr/str/
00000052.TIF
/response/lst/lst/arr/str/
;- : - ,- Assegurar o cumprimento dos procedimentos, requisitos e Política de SSSMA; Estimular â melhoria contínua
/response/lst/lst/arr/str/
-do SGA em suas áreas; Conhecer e contribuirpara a realização da Política de SSSMA da Eli Lilly; Cumprir
/response/lst/lst/arr/str/
00000108.TIF
/response/lst/lst/arr/str/
sobre política de privacidade e uso, clique aqui. Atualize sua página g. Preparar pagina) 2ãy pará Impressão http
/response/lst/lst/arr/str/
00000019.TIF
/response/lst/lst/arr/str/
de Brasília). Voltar A SRF agradece a sua visita. Para informações sobre política de privacidade e uso, clique
/response/lst/lst/arr/str/
00000020.TIF
/response/lst/lst/arr/str/
a sua visita. Para informações sobre política de privacidade e uso, clique aqui. Atualize sua página Preparar
/response/lst/lst/arr/str/
00000021.TIF
/response/lst/lst/arr/str/
sobre política de privacidade e uso, clique aqui. Atualize sua página 3. Preparar página §7 para impressão http
/response/lst/lst/arr/str/
00000022.TIF
/response/lst/lst/arr/str/
, informatização e outras alternativas. " ¦ " Conhecer e contribuir para a realização :da Política de SSSMA da Eli
/response/lst/lst/arr/str/
00000107.TIF
/response/lst/lst/arr/str/
sobre política de privacidade e uso, clique aqui. Atualize sua página http://www.receita.fazenda.gov.br
/response/lst/lst/arr/str/
00000081.TIF
/response/lst/lst/arr/str/
67 moléculas em 147 apresentações. íTopo i+8Sandoz2005-- i+ Nota Legal i+ Política de Privacidade w
/response/lst/lst/arr/str/
00000133.TIF
/response/lst/lst/arr/str/
° lugar. Hopo h- ÍPSandoz 2005 ¦? Nola Legal i+ Política de Privacidade i+ Empresa do Grupo Novartis http
/response/lst/lst/arr/str/
00000134.TIF

perceba que no corpo dos texto eles deixam uma tag de formatação html, que é o que dá o realce na palavra procurada...

S

entendi, muito obrigado renzo, vc e o cara quem sabe um dia nao tenho essa mesma abilidade que vc tem com java. espero um dia poder ajudar vc em algo.

me add no msn, [email removido]

renzonuccitelli

Fica tranquilo cara, eu nem tenho essa habilidade toda, o que eu sei aprendi batendo cabeça, do mesmo jeito que vc está agora. Só não esquece de me dar 10% do que vc ganhar com esse projeto aí…rs. Brincadeira à parte, fala bem do meu framework de processamento xml pro pessoal…hehe.

S

fica tranquilo, que ja tem duas pessoas usuando seu frameworks, aqui no CESAR. abraços e valeu.

Criado 22 de dezembro de 2008
Ultima resposta 23 de dez. de 2008
Respostas 32
Participantes 3