I have the next xml:
<mensajeWS>
<respuestaGetCabecerasType>
<cabeceras>
<cabecera>
<id>1234</id>
<tipoMensaje>3</tipoMensaje>
<datos>
<fechaEnvio>2023-12-13T00:05:00</fechaEnvio>
<fechaEnvio>2023-12-14T00:05:00</fechaEnvio>
</datos>
</cabecera>
</cabeceras>
</respuestaGetCabecerasType>
</mensajeWS>
And I want to map their data into the following object:
public class Cabecera implements Serializable {
/**
*
*/
private static final long serialVersionUID = -865317642824095952L;
private int id;
private int tipoMensaje;
private DatosRecepcion datos;
DatosRecepcion is a class with the following variable:
public class DatosRecepcion implements Serializable {
/**
*
*/
private static final long serialVersionUID = -6703565058845907875L;
private List<String> fechaEnvio;
To map the xml data to the object, do the following:
List<Cabecera> listaCabeceras = new ArrayList<Cabecera>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xml.toString())));
System.out.println("Root element: " + document.getDocumentElement().getNodeName());
NodeList nList = document.getElementsByTagName("cabecera");
for(int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
System.out.println("Current Element: " + nNode.getNodeName());
Element element = (Element) nNode;
System.out.println("id: " + element.getElementsByTagName("id").item(0).getTextContent());
System.out.println("Tipo de mensaje: " + element.getElementsByTagName("tipoMensaje").item(0).getTextContent());
System.out.println("Fecha de Envio: " + element.getElementsByTagName("fechaEnvio").item(0).getTextContent());
Cabecera cabecera = new Cabecera();
cabecera.setId(Integer.parseInt(element.getElementsByTagName("id").item(0).getTextContent()));
cabecera.setTipoMensaje(Integer.parseInt(element.getElementsByTagName("tipoMensaje").item(0).getTextContent()));
//cabecera.getDatos().setFechaEnvio(element.getElementsByTagName("fechaEnvio").item(0).getTextContent());
listaCabeceras.add(cabecera);
I would like to know how to map a repeating tag like fechaEnvio to my Java Object. I use version 8 of Java and they won't let me use a higher one at the moment
Thanks.
Map XML repet tag to Java object
You can do it like this way:
Node datosNode = element.getElementsByTagName("datos").item(0);
Element elementDatos = (Element) datosNode;
NodeList fechaEnvioList = elementDatos.getElementsByTagName("fechaEnvio");
List<String> data = new ArrayList<>();
for (i = 0; i < fechaEnvioList.getLength(); i++) {
data.add(fechaEnvioList.item(i).getTextContent());
}
cabecera.getDatos().setFechaEnvio(data);
listaCabeceras.add(cabecera);
In Cabecera class
private DatosRecepcion datos = new DatosRecepcion();