Используйте JAXB для создания объекта из строки XML
Как я могу использовать приведенный ниже код, чтобы разобрать строку XML и сопоставить ее с объектом JAXB ниже?
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;
}
}
4 ответа:
чтобы передать содержимое XML, вам нужно обернуть содержимое в
Reader
, и unmarshal что вместо:JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader("xml string here"); Person person = (Person) unmarshaller.unmarshal(reader);
или если вы хотите простой фразой:
Person person = JAXB.unmarshal(new StringReader("<?xml ..."), Person.class);
нет
unmarshal(String)
метод. Вы должны использоватьReader
:Person person = (Person) unmarshaller.unmarshal(new StringReader("xml string"));
но обычно вы получаете эту строку откуда-то, например, файл. Если это так, то лучше передать
FileReader
сам по себе.
Если у вас уже есть xml, и приходит более одного атрибута, вы можете обрабатывать его следующим образом:
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()); }
метод getCharacterDataFromElement является
public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } return ""; }