首页 > 解决方案 > 解析 CSV 和编组为 XML 的问题

问题描述

我正在尝试解决从 CSV 文件解析数据和编组到 XML 的问题。我写的代码几乎完美无缺,但输出不好,因为程序只将最后一行输出到 XML 中。有人可以帮我解决我哪里出错了吗?

我试图将整个新对象放入 While 循环,但随后它将最后一行输出到 XML 中 n 次(如果 CSV 文件有 24 行,它会将最后一行输出到 XML 中 24 次)......


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.regex.Pattern;
import generated.*;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

public class eSpremnicaHandel {

    public void eSpremnicaHandel(String csvFile) {

        String line = "";
        String cvsSplitBy = "|";

        RegistriranaPosiljka regpos = new RegistriranaPosiljka();
        Naslovnik nasl = new Naslovnik();
        Posiljka pos = new Posiljka();
        Storitev sto = new Storitev();
        Oddaja oddaja = new Oddaja();
        ArrayOfRegPosiljka regp = new ArrayOfRegPosiljka();

        oddaja.setWPID("CertSubject");
        oddaja.setKOMID(21553);
        oddaja.setSTODD(0);
        oddaja.setPOGID(2427);
        oddaja.setPODID(0);
        oddaja.setPOSID("7733");
        oddaja.setRegistriranePosiljke(regp);

        ObjectFactory fc = new ObjectFactory();           
        Oddaja odd = fc.createOddaja();
        odd.setWPID(oddaja.getWPID());
        odd.setSTODD(oddaja.getSTODD());
        odd.setKOMID(oddaja.getKOMID());
        odd.setPOGID(oddaja.getPOGID());
        odd.setPODID(oddaja.getPODID());
        odd.setPOSID(oddaja.getPOSID()); 
        regp.getREGPOS().add(regpos);
        odd.getRegistriranePosiljke();

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

            while ((line = br.readLine()) != null) {

                // use delimiter as separator
                String[] podatki = line.split(Pattern.quote(cvsSplitBy));

                regpos.setZAPST(Integer.parseInt(podatki[0])); 
                regpos.setREG(podatki[1]); 
                nasl.setNAZ(podatki[2]);   
                nasl.setPOSTST(podatki[3]); 
                pos.setMAS(new BigDecimal(podatki[4])); 
                sto.setNAZ(podatki[7]);
                regpos.setNAS(nasl);

            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        try{
            JAXBContext jc = JAXBContext.newInstance("generated");
            JAXBElement<Oddaja> element = fc.createOddaja(oddaja);
            Marshaller ms = jc.createMarshaller();
            ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            ms.marshal(element, System.out);
            ms.marshal(element, new File("src/eSpremnicaXML/test2.xml"));
        } catch(Exception e) {
            e.printStackTrace();
        }

    }
}

标签: java

解决方案


请尝试此版本的方法。主要变化是创建 RegistriranaPosiljka 的新对象在循环下移动

public static void eSpremnicaHandel(String csvFile) {

        String line = "";
        String cvsSplitBy = "|";


        Oddaja oddaja = new Oddaja();
        ArrayOfRegPosiljka regp = new ArrayOfRegPosiljka();

        oddaja.setWPID("CertSubject");
        oddaja.setKOMID(21553);
        oddaja.setSTODD(0);
        oddaja.setPOGID(2427);
        oddaja.setPODID(0);
        oddaja.setPOSID("7733");
        oddaja.setRegistriranePosiljke(regp);

        ObjectFactory fc = new ObjectFactory();
        Oddaja odd = fc.createOddaja();
        odd.setWPID(oddaja.getWPID());
        odd.setSTODD(oddaja.getSTODD());
        odd.setKOMID(oddaja.getKOMID());
        odd.setPOGID(oddaja.getPOGID());
        odd.setPODID(oddaja.getPODID());
        odd.setPOSID(oddaja.getPOSID());

        odd.setRegistriranePosiljke(oddaja.getRegistriranePosiljke());

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

            while ((line = br.readLine()) != null) {

                RegistriranaPosiljka regpos = new RegistriranaPosiljka();

                // use delimiter as separator
                String[] podatki = line.split(Pattern.quote(cvsSplitBy));

                regpos.setZAPST(Integer.parseInt(podatki[0]));
                regpos.setREG(podatki[1]);

                Naslovnik nasl = new Naslovnik();
                nasl.setNAZ(podatki[2]);
                nasl.setPOSTST(podatki[3]);

                Posiljka pos = new Posiljka();
                pos.setMAS(new BigDecimal(podatki[4]));

                Storitev sto = new Storitev();
                sto.setNAZ(podatki[7]);
                regpos.setNAS(nasl);

                regp.getREGPOS().add(regpos);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        try{
            JAXBContext jc = JAXBContext.newInstance("generated");
            JAXBElement<Oddaja> element = fc.createOddaja(oddaja);
            Marshaller ms = jc.createMarshaller();
            ms.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            ms.marshal(element, System.out);
            ms.marshal(element, new File("src/eSpremnicaXML/test2.xml"));
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

推荐阅读