【发布时间】:2018-11-13 06:43:09
【问题描述】:
我在将 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
现在我该怎么解决这个问题?
【问题讨论】:
标签: java xml object dom arraylist