У меня проблема с добавлением файловых узлов xml к объекту
XML-файл:
<?xml version="1.0" encoding="UTF-8"?>
<Users>
<User firstName="john">
<lastName>fall</lastName>
<score>12</score>
<score>11</score>
<score>9</score>
</User>
<User firstName="alen">
<lastName>spring</lastName>
<score>17</score>
<score>15</score>
</User>
</Users>
XML-файл имеет один и тот же score
узел с другим значением
У пользовательского класса есть 3 поля fName
, lName
, List<Integer> scores
и поданные оценки используются для добавления узла оценки в xml-файл.
Пользовательский класс:
import java.util.ArrayList;
import java.util.List;
public class User {
private String fName;
private String lName;
private List<Integer> scores;
public User() {
this("firstName", "lastName", new ArrayList<>());
}
public User(String fName, String lName, List<Integer> scores) {
setfName(fName);
setlName(lName);
setScores(scores);
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public List<Integer> getScores() {
return scores;
}
public void setScores(List<Integer> scores) {
this.scores = scores;
}
public String toString() {
StringBuilder sb = new StringBuilder();
getScores().forEach(val -> sb.append(String.format("%12d\n%18s", val, "")));
return String.format("%-12s%s%s\n\n", getfName(), getlName(), sb.toString());
}
}
Теперь я пытаюсьчитать узлы XML-файла и добавлять в список пользовательских объектов:
метод readXml:
public static void readXml(String xmlFile) {
Document doc = null;
NodeList nList = null;
NodeList nScoreList = null;
Element el = null;
String fName = null;
String lName = null;
List<Integer> scores;
try {
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFile);
doc.normalizeDocument();
nList = doc.getElementsByTagName("User");
scores = new ArrayList<>();
for (int i = 0; i < nList.getLength(); i++) {
el = (Element) nList.item(i);
fName = el.getAttribute("firstName");
lName = el.getElementsByTagName("lastName").item(0).getTextContent();
nScoreList = el.getElementsByTagName("score");
for (int j = 0; j < nScoreList.getLength(); j++)
scores.add(Integer.valueOf(nScoreList.item(j).getTextContent()));
System.out.println(new User(fName, lName, scores));
}
} catch (Exception e) {
e.printStackTrace();
}
}
вывод:
john fall 12
11
9
alen spring 12
11
9
17
15
, но мне нужен этот вывод:
john fall 12
11
9
alen spring 17
15
что я могу сделать для этой проблемы?