将 XML 重复标签映射到 Java 对象

问题描述 投票:0回答:1

我有下一个 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>

我想将他们的数据映射到以下对象中:

public class Cabecera implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -865317642824095952L;
    
    private int id;
    
    private int tipoMensaje;
    
    private DatosRecepcion datos;

DatosRecepcion 是一个具有以下变量的类:

public class DatosRecepcion implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -6703565058845907875L;
    
    private List<String> fechaEnvio;


要将 xml 数据映射到对象,请执行以下操作:

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);

我想知道如何将 fechaEnvio 这样的重复标签映射到我的 Java 对象。我使用 Java 8 版本,他们目前不让我使用更高版本

谢谢。

将 XML 重复标签映射到 Java 对象

java arrays xml java-8
1个回答
0
投票

你可以这样做:

    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);
© www.soinside.com 2019 - 2024. All rights reserved.