alissonvla 30 de nov. de 2011
cara,
vc pode usar o xstream para converter seu xml em objeto java, depois é so vc montar o txt printwriter.
t+
victorcosta 30 de nov. de 2011
XStream não lê fácil esses valores que estão dentro das tags, tem que fazer uns conversores feios
Mas você pode usar o JAXB que já vem no JDK, só tem um problema, seu XML é inválido
Um arquivo XML só pode ter um único elemento raiz. Segue um código que lê o XML com um elemento raiz
adicionado
package guj ;
import java.io.InputStream ;
import javax.xml.bind.JAXBContext ;
import javax.xml.bind.Unmarshaller ;
import javax.xml.bind.annotation.XmlAccessType ;
import javax.xml.bind.annotation.XmlAccessorType ;
import javax.xml.bind.annotation.XmlElement ;
import javax.xml.bind.annotation.XmlRootElement ;
import javax.xml.bind.annotation.XmlValue ;
@XmlRootElement ( name = "guj" )
@XmlAccessorType ( XmlAccessType . FIELD )
public class GUJ {
public Cabecalho cabecalho ;
public Bla1 bla1 ;
public Bla2 bla2 ;
public void imprimir () {
System . out . println ( "bla1, bla2" );
System . out . println ( bla1 . valor + ", " + bla2 . valor );
}
public static class Cabecalho {
@XmlValue public String valor ;
}
public static class Bla1 {
@XmlValue public String valor ;
}
public static class Bla2 {
@XmlValue public String valor ;
}
public static void main ( String [] args ) throws Exception {
InputStream input = GUJ . class . getResourceAsStream ( "/guj/GUJ.xml" );
JAXBContext context = JAXBContext . newInstance ( GUJ . class );
Unmarshaller unmarshaller = context . createUnmarshaller ();
GUJ result = ( GUJ ) unmarshaller . unmarshal ( input );
result . imprimir ();
input . close ();
}
}
<guj>
<cabecalho> 15/01/2011</cabecalho>
<bla1> João</bla1>
<bla2> Maria</bla2>
</guj>
victorcosta 30 de nov. de 2011
Se precisar ler aquele XML inválido seu me avisa que faço umas Regexps
alissonvla 30 de nov. de 2011
para fazer isso com xstream nao precisa fazer conversor nao, basta criar uma entidade com as propriedades das tags e pronto.
nao vejo nada de complicado nisso.
t+
victorcosta 30 de nov. de 2011
Os valores estão dentro das tags
Eu tentei usar XStream há pouco tempo pra ler algo assim e não consegui. Atributo ele só lê se estiver dentro da tag ()
Se eu estiver errado me corrija
wagnerfrancisco 30 de nov. de 2011
Não precisa de conversor victorcosta . A própria documentação do XSTream usa atributos fora da tag:
http://xstream.codehaus.org/tutorial.html
Falou!
victorcosta 30 de nov. de 2011
É verdade, eu que viajei pq quando precisei disso era em caso mais complicado
Era uma lista de tags, e cada tag tinha atributos da tag e um atributo no corpo, algo assim:
<tags>
<tag atributo1= "valor1" atributo2= "valor2" > valor</tag>
<tag atributo1= "valor1" atributo2= "valor2" > valor</tag>
</tags>
Como não consegui no XStream mudei pro JAXB pq tem o @XMLValue
De qualquer forma segue o código com XStream, mais enxuto
package guj ;
import java.io.InputStream ;
import com.thoughtworks.xstream.XStream ;
import com.thoughtworks.xstream.annotations.XStreamAlias ;
@XStreamAlias ( "guj" )
public class GUJ {
public String cabecalho ;
public String bla1 ;
public String bla2 ;
public void imprimir () {
System . out . println ( "bla1, bla2" );
System . out . println ( bla1 + ", " + bla2 );
}
public static void main ( String [] args ) throws Exception {
InputStream input = GUJ . class . getResourceAsStream ( "/guj/GUJ.xml" );
XStream xstream = new XStream ();
xstream . processAnnotations ( GUJ . class );
GUJ guj = ( GUJ ) xstream . fromXML ( input );
guj . imprimir ();
input . close ();
}
}
victorcosta 30 de nov. de 2011
E vendo agora, é desnecessário as classes extras no JAXB
package guj ;
import java.io.InputStream ;
import javax.xml.bind.JAXBContext ;
import javax.xml.bind.Unmarshaller ;
import javax.xml.bind.annotation.XmlAccessType ;
import javax.xml.bind.annotation.XmlAccessorType ;
import javax.xml.bind.annotation.XmlRootElement ;
@XmlRootElement ( name = "guj" )
@XmlAccessorType ( XmlAccessType . FIELD )
public class GUJ {
public String cabecalho ;
public String bla1 ;
public String bla2 ;
public void imprimir () {
System . out . println ( "bla1, bla2" );
System . out . println ( bla1 + ", " + bla2 );
}
public static void main ( String [] args ) throws Exception {
InputStream input = GUJ . class . getResourceAsStream ( "/guj/GUJ.xml" );
JAXBContext context = JAXBContext . newInstance ( GUJ . class );
Unmarshaller unmarshaller = context . createUnmarshaller ();
GUJ result = ( GUJ ) unmarshaller . unmarshal ( input );
result . imprimir ();
input . close ();
}
}
Aleksandro 1 de dez. de 2011
Bom dia, para todos que responderam o meu muito obrigado.
[list]victorcosta,wagnerfrancisco,alissonvla[/list]