Estou precisando realizar uma atividade e estou um pouco perdido em como fazê-la, pois não acho exemplos específicos a respeito do assunto. Sendo assim, se alguém puder me apontar o caminho, ficaria grato.
Preciso ler um XML e persistir as informações do mesmo. Quanto a persistência não tenho dúvidas, mas estou com dificuldades para realizar a leitura do XML, pois o mesmo possui o seguinte formato:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><list><ALtype="1111"value="Nome da Empresa"/><ALtype="2222"value="10"/><ALtype="Acti3333veUsers"value="20"/><ALaddressType="MAC Address"type="44444"value="XX-XX-XX-XX-XX-XX"/><ALtype="55555"value="YYYY"/></list>
Todos os exemplos que encontrei usando XStream, faziam referência a ler diretamente de estruturas simples, como por exemplo:
Pelo que entendi vc tem qu usar alias pra referenciar uma lista …
Primeiramente, obrigado pelo retorno.
Verifiquei os links e os mesmo fazem referência ao mesmo tipo de exemplo com estrutura mais simples que eu havia achado antes infelizmente.
Não tenho necessidade de usar o XStream, estava tentando utilizá-lo apenas por parecer ser o mais simples. No JAXB consigo fazer o que preciso? Em caso positivo teria como me dar algum exemplo utilizando ele e lendo algo próximo do meu xml de exemplo?
Obrigado.
J
Josue_Eduardo
Amigo, na minha visão a melhor forma de você ler estes dados, é ter sempre um POJO correspondente ao seu arquivo XML, por exemplo:
depois disso vc acessa os valores direto de Pessoa…
Bom, não sei se isso atende as suas necessidades, mas é uma idéia…
Abraços
Agradeço resposta, mas acredito que entre no mesmo dilema anterior: como crio um POJO do xml no meu exemplo?
Como pode ver ele usa uma lista interna no xml, e isso é exatamente o que está em confundindo…
Além da lista, como pego os valores dos atributos “type” e “value”, sendo que cada nó possui o mesmo nome “AL”?
J
Josue_Eduardo
Inicialmente não sou muito experiente com XML, talvez alguem ai possa aparecer e te dar uma resposta mais concreta sobre isso, mesmo assim vamos lá:
na questão do List... vc teria que basicamente ter um uma lista de "AL"... então vc teria algo como:
[code]
List lista = new ArrayList();
lista = (List) xStream.fromXML(arquivoXML);
Quanto ao type="11111" nunca utilizei o Xstream para fazer esse tipo de leitura, então prefiro não opinar por momento, mas qlqr coisa q eu achar eu coloco ae...
J
Josue_Eduardo
cara só pra complementar, da uma olhada e ve se te ajuda:
ele exlica como pegar os elementos das tags…
Abraços
luiz_renato
Olha,
Todos os link´s que foram passados (inclusive os meus) mostram como usar pojo´s pra XML inclusive com List´s mas se vc quizer do jeito muuuito mais difícil lá vai CTRL+C CTRL+V …
packagepacote;importjavax.xml.bind.annotation.XmlAccessType;importjavax.xml.bind.annotation.XmlAccessorType;importjavax.xml.bind.annotation.XmlAttribute;importjavax.xml.bind.annotation.XmlRootElement;/** bean do node da lista */@XmlRootElement(name="AL")@XmlAccessorType(XmlAccessType.FIELD)publicclassAl{@XmlAttributeprivateStringvalue;@XmlAttributeprivateStringtype;@XmlAttributeprivateStringaddressType;publicStringgetType(){returntype;}publicvoidsetType(Stringtype){this.type=type;}publicStringgetValue(){returnvalue;}publicvoidsetValue(Stringvalue){this.value=value;}publicStringgetAddressType(){returnaddressType;}publicvoidsetAddressType(StringaddressType){this.addressType=addressType;}}/** pojo com lista propriamente dita*/@XmlRootElement(name="list")@XmlAccessorType(XmlAccessType.FIELD)publicclassLista{@XmlElementprivateList<Al>list;publicList<Al>getList(){returnlist;}publicvoidsetList(List<Al>list){this.list=list;}}publicclassTeste{publicstaticvoidmain(String[]args)throwsJAXBException{Listalista=newLista();lista.setList(newArrayList<Al>());Ala1=newAl();a1.setType("111");a1.setValue("Nome da Empresa");Ala2=newAl();a2.setType("2222");a2.setValue("10");Ala3=newAl();a3.setType("44444");a3.setValue("XX-XX-XX-XX-XX-XX");a3.setAddressType("MAC Address");lista.getList().add(a1);lista.getList().add(a2);lista.getList().add(a3);JAXBContextcontext=JAXBContext.newInstance(Lista.class);Marshallermarshaller=context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);marshaller.setProperty(Marshaller.JAXB_ENCODING,"8859-1");JAXBElement<Lista>element=newJAXBElement<Lista>(newQName("list"),Lista.class,lista);StringWriterwriter=newStringWriter();marshaller.marshal(element,writer);System.out.println(writer);}}
dambros
Luiz, muito obrigado. Com esse “exemplo” (as aspas estão ai porque você praticamente me deu tudo pronto) fui capaz de fazer a parte do unmarshal sem grandes problemas e inclusive corrigir a parte de persistência. Funcionou como deveria
Somente por desencargo de consciência, por que disse ser “muuuito mais difícil”? Foi devido ao uso de JAXB ao invés de XStream?
luiz_renato
Olha,
O JAXB é muito mais verboso e cheio de anotações , se vc quer mudar qualquer coisa, tem muito trabalho.Com o XStream é mais fácil.
Eu uso o JAXB porque entrei num projeto e terminei aprendendo na marra, nao aconselho pra quem está começando