unmarshal parse jaxbunmarshaller bean java xml jaxb

java - parse - Use JAXB para crear objetos a partir de cadenas XML



object to xml java spring (4)

¿Cómo puedo usar el siguiente código para descomprimir una cadena XML y asignarla al objeto JAXB a continuación?

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Person person = (Person) unmarshaller.unmarshal("xml string here");

@XmlRootElement(name = "Person") public class Person { @XmlElement(name = "First-Name") String firstName; @XmlElement(name = "Last-Name") String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }


No hay unmarshal(String) método unmarshal(String) . Deberías usar un Reader :

Person person = (Person) unmarshaller.unmarshal(new StringReader("xml string"));

Pero generalmente está obteniendo esa cadena de algún lado, por ejemplo, un archivo. Si ese es el caso, mejor pase el FileReader .


O si quieres un simple trazador de líneas:

Person person = JAXB.unmarshal(new StringReader("<?xml ..."), Person.class);


Para pasar contenido XML, debe envolver el contenido en un Reader y desempatarlo en su lugar:

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader("xml string here"); Person person = (Person) unmarshaller.unmarshal(reader);


Si ya tiene el xml y viene más de un atributo, puede manejarlo de la siguiente manera:

String output = "<ciudads><ciudad><idCiudad>1</idCiudad> <nomCiudad>BOGOTA</nomCiudad></ciudad><ciudad><idCiudad>6</idCiudad> <nomCiudad>Pereira</nomCiudad></ciudads>"; DocumentBuilder db = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(output)); Document doc = db.parse(is); NodeList nodes = ((org.w3c.dom.Document) doc) .getElementsByTagName("ciudad"); for (int i = 0; i < nodes.getLength(); i++) { Ciudad ciudad = new Ciudad(); Element element = (Element) nodes.item(i); NodeList name = element.getElementsByTagName("idCiudad"); Element element2 = (Element) name.item(0); ciudad.setIdCiudad(Integer .valueOf(getCharacterDataFromElement(element2))); NodeList title = element.getElementsByTagName("nomCiudad"); element2 = (Element) title.item(0); ciudad.setNombre(getCharacterDataFromElement(element2)); ciudades.getPartnerAccount().add(ciudad); } } for (Ciudad ciudad1 : ciudades.getPartnerAccount()) { System.out.println(ciudad1.getIdCiudad()); System.out.println(ciudad1.getNombre()); }

el método getCharacterDataFromElement es

public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } return ""; }