{RESOLVIDO}Como criar um arquivo XML?

oi gente to com uma duvida e o material q tenho aqui nao e suficiente entao queria saber se alguem ai tem algum tutorial … codigo de explo … ou q possa me encinar a gerar um arquivo XML atraves do codigo …

meu problema e o seguinte tenho um programa q tem q gravar o resutado de algumas variaveis … mesmo depois de inserado ele tem q ter esses valores para iniciar de onde parou…
e nao vo usar banco de dados pois sao simples variaveis tipo … nome de um unico usuario e tempo de excusao … coisas assim …mais de um unico usuario …entao estava pensando em deixar isso em um arquivo xml e quando o programa fosse iniciado novamete iria começar de onde parou …

mais nunca gerei um arquivo xml antes e o material q tenho aqui nao e bom … ja pesquisei e achei o codigo pronto … mais isso noa me ajuda pois preciso configurar o nome as variavei e coisas assim… mais como fasso isso em um codigo pronto e q nao tenho noçao de como faser …!! olha o ex de codigo q achei … para uma pessoa q nunca mexeu isso e totalmente estranho …

http://www.guj.com.br/java/71112-criando-xml-com-jdom

nem sei o por q eles usaram isso …e muito menos como …!!

entao se alguem puder me ajudar fico muito agradecido …

Olá,

Tem várias formas…

o XStream é o que eu acho mais legalzinho e tals:

  • Cria uma classe Java com o que deverá ter no XML;
  • Instancia o Xstream;
  • chama o método para serializar em XML (criar).

Olha:

http://xstream.codehaus.org/tutorial.html#to-xml

Otimo … masi isso e um poco superficial …!!( e meu ingles nao exelente nao )… hehehehe

masi to lendo aqui e to começando a entender …

e aqui nao fala como ler o arquivo nao ???

mais ta otimo …!!!
masi se alguem tiver masi material sera bem vindo …!! hehehe

e to olhando aqui tem um JDOM tambem… quem puder me encina ai e me fala aqul e melhor ou mais facil de mecher …!!

obrogadao GENTE .!!

Você tem o formato do XML que você quer criar? Posta ae.

Você tem que criar uma classe igual ao XML que você quer criar e usa um método da classe XStream para criar ele.

Nao tenho …

e por isso q to atraz de material … e por q to fasendo um programa e ele tem q guardar certos tipos de dados …
tipo serial do computador … e nome de usuario … hora q o programa foi iniciado e hora que foi fechado … como e de um unico usuario … o usuario q esta usando o programa naquele dia … ou naquele momento … e uma coisa tipo assim enquanto nao for mudado o nome do usuario atraves de um botao de configuraçao do programa ,pro programa sera aquele usuario sempre …so mudando a hora de inicia e de finalizar… mais tem como alterar o usuario…por q esse usuario e tipo se fosse uma senha de acesso ao programa …so que esse programa nao tem ligaçao nehuma com bancos de dados em geral e nao quero faser isso com um banco de dados … mais nunca gerei um arquivo xml … por isso q estou perdido …!

ate bom vc ter comentado no assunto … vou te faser uma pergunta …

Tem como guardar esses dados em um xml (tipo se fosse um micro banco de dados so q com uma unica informaçao )??? e depois usar eles pra iniciar o programa ??? … sendo que o nome do usuario , hora , e serial podem ser alterados … de acordo com a vontade do usuario ou de acordo com a finalizaçao do programa ???

se tiver …que tipo de arquivo xml vou usar ???.. e como posso gerar isso (Gravar e ler o arquivo )atraves do codigo java ???..

acho que expliquei melhor meu problema …!

Ha, eu me expressei mal.

O que o seu XML deve conter em termos de campos?

É possível usar o XML para armazenagem pequenas sim.

Digamos que vamos ter no XML:

Então iremos modelar em um POJO (classes Java simples com atributos e métodos GET e SET só):

public class Dados{
	private String nomeUsuario;
	private String serial;
	
	
	
	public Dados(String nomeUsuario, String serial) {
		super();
		this.nomeUsuario = nomeUsuario;
		this.serial = serial;
	}
	@Override
	public String toString() {	
		return nomeUsuario + " - " + serial;
	}
	public String getNomeUsuario(){
		return this.nomeUsuario;
	}
	
	public String getSerial(){
		return this.serial;
	}
	
	public void setNomeUsuario(String nomeUsuario){
		this.nomeUsuario = nomeUsuario;
	}

	public void setSerial(String serial){
		this.serial = serial;
	}	
}

Para transformar em XML olha o código abaixo:

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class ParaXML{
	public static void main(String[] args) {
		
		//O Xstream está criado
		XStream xstream = new XStream(new DomDriver());
		
		//Uma lista com vários "beans", objetos do tipo Dados
		List<Dados> dados = new ArrayList<Dados>();
		
		//vamos adicionar uns dados para teste
		dados.add(new Dados("José", "123654"));
		dados.add(new Dados("Judas", "654123"));
		dados.add(new Dados("Jão", "111222"));
		dados.add(new Dados("Jair", "333555"));
		
		//Agora vamos passar esses dados para XML
		String xml = xstream.toXML(dados);
		System.out.println(xml);
	}	
}

Isso deve imprimir o seguinte:

<list>
  <Dados>
    <nomeUsuario>José</nomeUsuario>
    <serial>123654</serial>
  </Dados>
  <Dados>
    <nomeUsuario>Judas</nomeUsuario>
    <serial>654123</serial>
  </Dados>
  <Dados>
    <nomeUsuario>Jão</nomeUsuario>
    <serial>111222</serial>
  </Dados>
  <Dados>
    <nomeUsuario>Jair</nomeUsuario>
    <serial>333555</serial>
  </Dados>
</list>

Para voltar para a nossa lista podemos usar o código abaixo(supondo que você usou aquele XML e colocou em um arquivo):

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class DoXML {
	public static void main(String[] args) throws FileNotFoundException {
		XStream xstream = new XStream(new DomDriver());
		
		@SuppressWarnings("unchecked")
		List<Dados> dados =  (List<Dados>) xstream.fromXML(new FileReader("dados.xml"));
		
		for (Dados dado : dados) {
			System.out.println(dado);
		}
	}
}

Para o seu objetivo basta que você monte a classe, salve em um arquivo o resultado e depois recupere esse arquivo como acima!

Agora, é claro que temos coisas mais avançadas na API do XStream, você vai mexendo vai sentindo necessidade das coisas (por exemplo adicionar algo como atributo invés de ser uma TAG).

Para finalizar, um pequeno tutorial que escrevi há muito tempo atrás:

http://javafree.uol.com.br/artigo/874888/Criando-XML-com-XStream.html

MUITO OBRIGADO ERA ISSO MESMO QUE EU QUERIA …!!!

so a ultima pergunta …!!!

TIPO toda vez que eu chamar a classe ou um metodo de criar XML ele cria um novo xml com o nome DADOS(duplicando a classe ) ou ele altera o XML ja existente com o nome DADOS ou ele deleta o existente e cria outro com os dados atualizados …??

MAIS MUITO OBRIGADO MESMO …!!!

[color=darkblue]E OUTRA SEU TUTORIAL ESTA OTIMO E DE FACIL ENTENDIMENTO … MUITO BOM MESMO …!!![/color]

[quote=kiq095]MUITO OBRIGADO ERA ISSO MESMO QUE EU QUERIA …!!!

MAIS MUITO OBRIGADO MESMO …!!!

[color=darkblue]E OUTRA SEU TUTORIAL ESTA OTIMO E DE FACIL ENTENDIMENTO … MUITO BOM MESMO …!!![/color][/quote]
Vlw :slight_smile:

Sim. Olhe esse outro exemplo:

import java.io.*;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class CriaAlteraXML {
	
	static final String ARQUIVO = "/dados.xml";
	public static void main(String[] args) throws IOException {
		XStream xstream = new XStream(new DomDriver());
		Dados dados = new Dados("JAUM", "123546");
		String strXML;
		/*
		  Vai imprimir:
		  <Dados>
  				<nomeUsuario>JAUM</nomeUsuario>
  				<serial>123546</serial>
			</Dados>		  
		 */
		strXML = xstream.toXML(dados);
		System.out.println(strXML);
		dados.setNomeUsuario("João");
		dados.setSerial("8888");
		/*
		  Vai imprimir:
			<Dados>
			  <nomeUsuario>João</nomeUsuario>
			  <serial>8888</serial>
			</Dados>	  
		 */		
		strXML = xstream.toXML(dados);
		System.out.println(strXML);
		
		//vamos salvar esses dados agora
		salvaDados(strXML);
		
		//Agora vamos recuperar esses dados
		//coloquei em outro objeto para facilitar a compreensão
		Dados dadosRecuperados = (Dados) xstream.fromXML(new FileReader(ARQUIVO));
		/*
		 Deverá imprimir:
		 	João - 8888
		  */
		System.out.println(dadosRecuperados);
	}
	
	//Não use esse monte de método estático, é só para demonstrar o uso :)
	public static void salvaDados(String conteudo)throws IOException{
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(ARQUIVO)));	
		bw.write(conteudo);
		bw.close();
	}
}

aaaaaa ok…!!!

agora entendi …!!!

OBIGADAO …!

OPiS…!!!

estou usando o netbeans e ele nao esta aceitando nada …!!
so ta dando erro …!

ate pra importar as bibliotecas ta dando erro …!!

quer diser … pelo menos a do Dom Driver…

nao aceita nada … vc sabe por q ???

achei o erro e q tinha q importar as bibliotecas pro projeto …!!!

Você tem que adicionar o JAR do XStream. Só o jar da release dele já basta, o DomDriver não precisa, já está no xstream.

Chega nessa tela daqui:

http://wiki.forum.nokia.com/index.php/Adding_a_new_library_to_NetBeans

Adiciona uma Library e nela você linka o JAR do XStream.

[]'s

aqui peguei o q vc me passou e fiz assim …!! simplifique… ou pelo menos tentei ne !!!

nao testei ainda mais vai dar certo ???.. por q o frame ta com um erro de tempo aqui … e um erro q nao tem nada a ver com as classes …!!

entao da uma olhadinha ia fasendo favor … por q vo ter q faser mais teris classes parecidas …!!

a classe simples do driver .!!!

[code]package k_atualizador;

public class Salvar_Driver {
private String DRIVER="";

public Salvar_Driver(String driver){
DRIVER=driver;

}

public String getDRIVER() {
    return DRIVER;
}

public void setDRIVER(String DRIVER) {
    this.DRIVER = DRIVER;
}

}[/code]

e essa e a clase de salvar sendo chamada por um frame

[code]package k_atualizador;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.*;
import javax.swing.JOptionPane;

public class DRIVER_XML {

public DRIVER_XML(){

}

public boolean SALVAR(String driver)throws IOException{
boolean test=false;
String ARQUIVO = “/campos.xml”;
try{
XStream xstream = new XStream(new DomDriver());
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(ARQUIVO)));
Salvar_Driver salvar =new Salvar_Driver(driver);
String strXML;

strXML = xstream.toXML(salvar);
salvar.setDRIVER(driver);  
bw.write(strXML);  
bw.close(); 

}
catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "ERRO AO SALVAR OS DADOS ",“ERRO 19”,JOptionPane.INFORMATION_MESSAGE);
test=false;
}

return test;

}

}
[/code]

e assim mesmo …??? por q erro de sintaxe nao deu …!!

obrigadao pela ajuda…!!

Posta o erro para vermos!

Provavelmente é por que você não está respeitando a notação de POJO, a padronização. A API deve usar reflection para chamar os seus método. Aqui são esclarecidas as convenções de código Java:

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Por exemplo, o atributo DRIVER deveria ser minúsculo. Mas eu não tenho certeza se é esse o problema, você deveria postar o erro mesmo :slight_smile:

consertei o erro aqui … mais o erro noa e nada a ver com as clases q vc passei pra vc nao …
e ja testei … ta chamando tudo certinho ai coloquei pra imprimir … e salvar como ta na classe ai em cima …!!! ta igualzinho …!!

e quando imprime aparese isso …


<k_Atualizador.Salvar_Driver>
              <DRIVER>Driver test</DRIVER>
</k_Atualizador.Salvar_Driver>

o certo e isso mesmo ??
como fasso pra saber se ta salvando ??
por q nao ta dando erro nao … pelo menos ainda nao ne … hehehe

Obrigadao pela ajuda …!!

sorte que o godoy não entrou aqui.

Agora ta dando erro na hora de recuperar os dados …

se eu colocar desse geito da erro de sintax falando q esta faltando um ponto e virgola ( ; ) … mais onde ???

Salvar_Driver recuperar=new (Salvar_Driver) xstream.fromXML(new FileReader(ARQUIVO));

no mais ta ai o metodo de busar os dados …

[code]public String Recuperar_driver(){
String DRIVER="";
//Salvar_Driver recuperar=new (Salvar_Driver) xstream.fromXML(new FileReader(ARQUIVO));

      try {

      DRIVER= (String) xstream.fromXML(new FileReader(ARQUIVO));
      JOptionPane.showMessageDialog(null,DRIVER,"ERRO  20",JOptionPane.INFORMATION_MESSAGE);

    }
      catch (FileNotFoundException ex) {

        JOptionPane.showMessageDialog(null, "ERRO AO RECUPERAR O DRIVER "+ex.toString(),"ERRO  20",JOptionPane.INFORMATION_MESSAGE);

    }

return DRIVER;
}[/code]

e esse e o erro q eta dando …!!
como posso resolve-lo ???

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: k_atualizador.Salvar_Driver cannot be cast to java.lang.String at k_atualizador.DRIVER_XML_FORNECEDOR.Recuperar_driver(DRIVER_XML_FORNECEDOR.java:56) at k_atualizador.Frame_configurar.botao_DRIVERSActionPerformed(Frame_configurar.java:157) at k_atualizador.Frame_configurar.access$000(Frame_configurar.java:9) at k_atualizador.Frame_configurar$1.actionPerformed(Frame_configurar.java:52) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6267) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6032) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

POR Q ??

E QUEM E GODOY ???

godoy é um moderador que ERA muito gente boa. hoje ele se empenha mais em mostrar as falhas dos outros do que em dar respostas simples.
se ele entrar aqui ao invés de te ajudar ele vai julgar seus erros de português.
talvez ele até te ajude, pra depois poder dizer que eu falei demais.
enfim, vou buscar uma solução aqui pra você mais não posso testar aqui no serviço.

mais meus erros tem fundamentos e q escrevo muito rápido e não volto corrigindo … por isso mesmo …estou no serviço e custo pra achar um tempinho pra olhar e responder …

mais quando quero escrever certinho escrevo …!!! (pelo menos eu acho que escrevo né !!!) heheheeheehe …

mais mesmo assim obrigado por tentar me ajudar …!!