Gravando XML pelo java

17 respostas
Growth

Olá pessoal,

Como faço para criar e gravar dados em um arquivo XML , usando java ?

Obrigado.

17 Respostas

bland

Procure pela API JDOM.

Growth

Gostaria de ver através de um exemplo.

No tutorial do GUJ só tem um exemplo de leitura de um arquivo XML.

Pedrosa

De uma olhada nisso:

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

Growth

Verifiquei o exemplo, porém meu arquivo precisa gravar mais coisas, como por exemplo a linha inicial do arquivo :

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

preciso gravar também campos com atributos:

VOXlans.Kernel 17/Oct/2006 12:08:02 OnStart() - Inicio da carga do serviço VOXlans
Growth

Pelo que vi, o XStream não consegue gerar um XML como o do exemplo que enviei.

Tem algum outro jeito ?

Pedrosa

Veja se ele consegue alterar o arquivo xml, esse cabeçario deixe como padrão e adicione o novo conteudo no arquivo, talves isso resolva seu problema!

tiagomr

bom, aumentando a duvida, já q estamos no assunto, é o seguinte, usei o XStream para gerar o arquivo, soh que preciso saber como adicionar mais coisas no arquivo depois, sem que de erro, pois quando mando adicionar ao final do arquivo, ele adiciona toda a estrutura denovo, e nao é isso q preciso.

Guilherme_Silveira

Bom dia…

Todas as suas duvidas o xstream dá conta

Sobre atributos, de uma olhada no tutorial de alias:
http://xstream.codehaus.org/alias-tutorial.html

Sobre o cabecalho, note que o Xstream é uma facade para um driver, seja o dom, sax, stax etc. Portanto o responsavel por escrever ou interpretar aquela linha é o driver, e nao o xstream. Para escrever aquela linha, a sugestao mais comum na lista de usuarios é que voce mesmo escreva, caso o driver nao o faca (normalmente é isso mesmo).

Tem um tutorial novo que deve sair com a proxima versao do xstream tambem, voce pode baixar o fonte do subversion se quiser.

Abraço

K

olá pessoal, aproveitando o tópico, gostaria de tirar uma dúvida.
tenho um XML q deve ser setado como atributo de uma classe,
mas qdo faço isso, ocorre o seguinte erro:

<?xml version="1.0" encoding="UTF-8"?> 104 Lote processado [color=red]<protNFE>[/color] <xmlProcessamento>&lt;xmlProcessamento&gt; &lt;cStat&gt;301&lt;/cStat&gt; &lt;xMotivo&gt;Uso Denegado : Irregularidade fiscal do emitente &lt;/xMotivo&gt; &lt;chNFe&gt;35061206370636000101550010000952240039787598&lt;/chNFe&gt; &lt;dhRecbto&gt;2006-12-29T16:42:32&lt;/dhRecbto&gt; &lt;nProt&gt;131060000000080&lt;/nProt&gt; &lt;digVal&gt;1cRF8In/J9DNupF8C3dgqTdi5aU=&lt;/digVal&gt;&lt;/xmlProcessamento&gt;&lt;xmlProcessamento&gt; &lt;cStat&gt;212&lt;/cStat&gt; &lt;xMotivo&gt;Rejeição: Data de Emissão NF-e posterior a data de recebimento&lt;/xMotivo&gt; &lt;chNFe&gt;31061221657911000247557000000000892520855240&lt;/chNFe&gt; &lt;dhRecbto&gt;2006-12-19T16:47:21&lt;/dhRecbto&gt; &lt;nProt&gt;131060000000081&lt;/nProt&gt; &lt;digVal&gt;bOXBNfpuxebmgEI07BwlAEE3sUc=&lt;/digVal&gt;&lt;/xmlProcessamento&gt;</xmlProcessamento> </protNFE>

suas tags ficam todas ilegíveis, alguém poderia me ajudar, to usando o Xstream para trabalhar como o XML?

obs:aonde tah em vermelho pode-se observar que a tag está sendo repetida novamente. :?:

Guilherme_Silveira

Na verdade você tem uma String que deve ser setada como atributo… acontece que essa string é composta por código xml. Para ser compatível com qualquer string, todo < e > deve ser “escapado”, portanto o resultado fica esse que não é o que você deseja.

Você tem duas opções, uma é sobreescrever o objeto responsável por efetuar escapes e cancelar tal escape e outra é escrever um conversor proprio.

Para escrever um conversor de uma olhada no tutorial do mesmo.

Para sobreescrever o responsavel por escapes, eu nao lembro de cabeça, mas olhando a lista de discussao do xstream você vai achar exemplos.

Abraço

Guilherme

K

Guilherme, vc diz q seria um conversor como se fosse pra ler um atributo da tag?

tipo se eu tiver uma tag , eu terei q criar um conversor pra ler este atributo id, eh esse tipo de conversor?

Ana Carla

Guilherme_Silveira

No seu exemplo voce precisa fazer:

NFE nfe = new NFE();
nfe.setId(14);

xstream = new XStream();
xstream.useAttributeFor("id", int.class);

ou na versão do subversion:

NFE nfe = new NFE();
nfe.setId(14);

xstream = new XStream();
xstream.useAttributeFor(NPE.class, "id");

No exemplo que eu comentei, é quando uma variavel membro possui codigo xml dentro dela, algo como:

NFE nfe = new NFE();
nfe.setBlaBla("<myattribute>whowhowho</myattribute>");

xstream = new XStream();
// use um conversor diferente ou troque o "escaper"
vivi_grieco

ola Guilherme,
estou passando pelo mesmo problema, mas não sei como usar esse escaper… vc teria algum exemplo?

Guilherme_Silveira

Tenho sim, da uma olhada que o Jim fala como fez isso:

http://www.nabble.com/Need-to-serialize-String-containing-XML-fragment-t1975313.html

Abraço

Guilherme

K

Pessoal estou precisando de ajuda novamente,
na minha aplicação eu vou ate o banco e pego um xml,a minha classe java transforma essa xml em um objeto em memória, leio um ArrayList, pertencente a este objeto, e retiro por exemplo, o primeiro objeto desta lista e o transformo novamente para um xml para verificação do certificado digital de cada elemento desta lista, mas o problema começa ae, qdo eu converto de objeto para xml perco o valor de alguns atributos e o meu XStream diz não encontrar uma tag que estah lá,
Alguma sugestão :?:
Este eh o xml criado

. . . [color=red][/color] [color=blue] [color=cyan] [/color][/color] IFbjCCBFagAwIBAgIQXO2XtLOxP0xa/+iK81Qz/fiCvJPlCVFLqnI7DkI5cQ7

A tag em vermelho eh a q ele diz não encontrar e a tag em azul eh a que perde a referencia dos valores.
:?:

Guilherme_Silveira

O ideal é ver o código de configuração e o das classes para tentar situar melhor o que pode estar sendo feito de errado

Abraço

Guilherme

K

Valeu guilherme, mas acabei achando o meu próprio erro!
Eu to querendo saber o seguinte, eu tenho um XML q eh armazenado no banco e qdo eu pego ele e o transformo em objeto em memória o XStream tah bagunçando a ordem dos elementos e isso tah implicando em um schema errado inclusive em uma assinatura diferente digital q acaba não batendo.
Eu tenho como resolver isso, ou seja, fazer com q o XML gerado a partir do objeto em memória, escreva os elementos em uma determiada ordem?

Alguma idéia do pq dessa inversão dos elementos dentro do XML?

Criado 19 de outubro de 2006
Ultima resposta 8 de jan. de 2007
Respostas 17
Participantes 7