Ler XML

8 respostas
ricardo_batista_alme

Galera boa tarde é o seguinte , alguém sabe alguma forma de ler um XML , mais o detalhe é o seguinte sei que tem o XStream e o JAXBContext ,
minha duvida vi que i XStrem é mais facil porém o que preciso é o seguinte.
Tem um xml que tem n tag’s mais ou menos assim
<>top<>
<>a</>
<>ze</>
<>zezao</>
<>a</>
<>top</>
<>zzzzz<>
<>a</>
<>opa</>
<>okay</>
<>a</>
<>zzzz</>

eu quero ler apenas os dados da tag , como eu faço , pelo que parece todas as api de xml do java exige que mapei o xml inteiro para uma classe .

8 Respostas

rodrigo.uchoa

É só você usar SAX ao invés de DOM. É possível usar um SAX Parser também com JAXP. XStream eu não tenho certeza.

ricardo_batista_alme

Tem algun exemplo usando SAX

Rodrigo_Sasaki

use XPath :slight_smile:

ricardo_batista_alme

Consegui pegar o que eu quero com o SAXBuilder , porem o Id da nf esta vindo nullo alguém sabe o por que ?

ricardo_batista_alme

Decidir usar o XmlBeans mais não to conseguindo pegar o que quero.
exemplo compilei o leiauteNFe deu tudo certo mais não consigo chegar na informação que eu quero.

TNfeProc nfe = TNfeProc.Factory.parse(file);
nfe.getNFe().getInfNFe().getIde();

deveria funcionar mais vem null , alguém sabe por que.

ricardo_batista_alme

assim ele printa o xml que enviei

System.out.println(nfe);
mais gostaria de pegar os objetos das respectivas tag

ricardo_batista_alme

Estou usando o JaxB e da o seguinte erro com a nfe.
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.portalfiscal.inf.br/nfe", local:"nfeProc"). Expected elements are <{http://www.portalfiscal.inf.br/nfe}NFe>,<{http://www.w3.org/2000/09/xmldsig#}Signature>
alguem sabe por que ?

ricardo_batista_alme

Faltava isso:

@SuppressWarnings(unchecked)

public static TNfeProc getTNfeProc(String xml) throws Exception{

try {

JAXBContext context = JAXBContext.newInstance(TNfeProc.class);

Unmarshaller unmarshaller = context.createUnmarshaller();

TNfeProc nfe = unmarshaller.unmarshal(new StreamSource(new StringReader(xml)), TNfeProc.class).getValue();

return nfe;

} catch (JAXBException ex) {

throw new Exception(ex.toString());

}

}
Criado 25 de setembro de 2013
Ultima resposta 3 de out. de 2013
Respostas 8
Participantes 3