Edição arquivo XML

Caros, boa tarde.

Preciso fazer a edição de um arquivo XML. Tal arquivo tem informações para acesso ao banco de dados (hibernate). Estou estudando a API SAX, que foi o que identifiquei como a meneira para realizar a edição.

A dúvida é, para editar o arquivo, realmente é necessário fazer através do SAX (ou DOM), ou é existe uma outra maneira mais simples?

Lembrando que preciso mudar algum_texto para outro_texto, só isso!

Obrigado desde já.

Pessoal, boa tarde.

Alguma dica para a dúvida abaixo?

Obrigado.

Se vc quer algo simples é só ler o arquivo XML como se fosse um arquivo texto e dar replaceAll(“um_texto”,“outro_texto”) e depois salvar o arquivo novamente.

Apesar de eu achar que ler um XML com JDOM é mais simples que isso.

Cara…tenho a solução para vc…
http://www.igorgm.blogspot.com

Dá uma olhada no meu blog…
eu fiz uma postagem relacionada a exatamente isso que vc precisa…

PS: Aproveita e dexa um comentariozim lá…
:smiley:
vlws!

[quote=furutani]…

Apesar de eu achar que ler um XML com JDOM é mais simples que isso.[/quote]

Estou estudando a API, ainda fixando as ideias mas, a princípio, parace bem bacana. Alterei o valor de um elemento e percebi que funciona, mas apenas em tempo de execução. O possível problema é se não conseguir alterar o valor de um elemento e salvá-lo de forma simples, que é o que preciso.

Andei lendo por aqui que como se trata de um arquivo texto, o mesmo precisa ser totalmente reescrito para que determinado valor seja alterado. Vou continuar lendo para tentar encontrar algo mais simples, se é que existe.

Obrigado.

Caros, boa noite.

Estou há algumas horas estudando, ainda, a API JDOM e existem algumas dúvidas, se alguém puder ajudar fico agradecido.

Imaginem uma estrutura:

<TI> <banco-dados> <sql name="select">select * from table</sql> <sql name="delete">delete from table</sql> <sql name="update">update table set ...</sql> </banco-dados> </TI>

Em determinado momento eu tenho:

... Element TI = document.getRootElement(); List<Element> sql = TI.getChildren(); ...

Bom, pela documentação, eu tenho na variável sql uma lista com todos os elementos. A dúvida é:

sql[0] = banco-dados sql[1] = sql
??

Mais abaixo no código eu tenho:

for(Element el : sql) { System.out.println("attribute: " + el.getAttributeValue("name")); //nao funciona, porque ainda não estou no elemento sql, onde tem o atributo name System.out.println("valor: " + el.getValue()); //ta,bém não imprime nada }

Bom, ‘na primeira passada’ el é banco-dados. Mas como ‘sair’ do elemento banco-dados e ir para o elemento sql, que é o elemento que eu tenho atributos?

Não existe uma espécie de setValue para alterar o valor de determinado elemento?

Obrigado desde já.

Dê uma olhada no xstream, ele permite o mapeamento direto de um ojeto java para xml, e até onde ouvi falar é bem superior a outras soluções
http://xstream.codehaus.org/

A idéia do furutani do replace all tbm pode ser uma boa, dependendo da complexidade da alteração… Um complemento a essa ideia é vc aproveitar o metodo replace all de forma a identificar as tags que serão alteradas seja usando expressões regulares ou uma substring indo do começo ao fim da Tag.

[]s

[quote=furutani]Se vc quer algo simples é só ler o arquivo XML como se fosse um arquivo texto e dar replaceAll(“um_texto”,“outro_texto”) e depois salvar o arquivo novamente.

…[/quote]

Depois de muito ler sobre o JDOM e, concluir que não serve para o que eu preciso (ao menos não encontrei a solução), resolvi partir para a utilização do replaceAll, conforme indicado acima.

Fiz alguns testes iniciais e aparentemente resolveu meu problema.

Agora, como não é possível editar o arquivo e salvar as alterações, apenas escrever do início ou final, fiz a leitura do arquivo [color=red]A[/color] e gravei num arquivo B. Feito isso apaguei o arquivo [color=red]A[/color], e alterei o nome do arquivo B para [color=red]A[/color]. Confuso? Solução meio porca? Não sei, foi o que eu consegui (vale dizer que sou novo nisso).

Se alguém tiver outra idéia para esse delete/rename, fico agradecido.

Obrigado.