java - 解析 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();
}
}
}
解决方案
请尝试此版本的方法。主要变化是创建 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();
}
}
推荐阅读
- python-3.x - Python:将字符串转换为数组
- web-scraping - 我们怎样才能让我们的抓取看起来像一个真实的人浏览
- mysql - Azure Webapp 没有为 mysql 更新 Azure 数据库
- javascript - Odometer.js 从 0 开始不断更新
- javascript - 我想使用 Javascript 将 Django 的 url 传递给表单的操作
- c++ - C++ wxWidgets MVC 结构
- javascript - 在 node.js 中导入模块失败
- c# - 项目源列表为空时如何隐藏选项卡控件
- python-3.x - 导入创建的模块并打印它
- qt - 使用Qt显示一个颜色块