java我可以在XML输出方法中使用循环吗?
下面的方法应该取所有存储的学生,并用数据生成一个XML文件。按原样,XML结构正确,但两个条目相同。我没有得到student1和student2的数据,而是连续两次得到student2。我错过了什么
public void exportStudentXML(ArrayList <Student> studentListIn ){
ArrayList <Student> studentList = studentListIn;
DocumentBuilderFactory myDocBuilderFactory = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder myDocBuilder = myDocBuilderFactory.newDocumentBuilder();
Document documentModel = myDocBuilder.newDocument();
Element root = documentModel.createElement("studentList");
documentModel.appendChild(root);
for (Student thisStudent : studentList){
Element listElement = documentModel.createElement("student");
root.appendChild(listElement);
Element nameElement = documentModel.createElement("name");
Text nameText = documentModel.createTextNode(thisStudent.name);
nameElement.appendChild(nameText);
listElement.appendChild(nameElement);
Element addressElement = documentModel.createElement("address");
Text addressText = documentModel.createTextNode(thisStudent.address);
addressElement.appendChild(addressText);
listElement.appendChild(addressElement);
Element ssnElement = documentModel.createElement("ssn");
Text ssnText = documentModel.createTextNode(thisStudent.socialSecurityNumber);
ssnElement.appendChild(ssnText);
listElement.appendChild(ssnElement);
Element dobElement = documentModel.createElement("dob");
Text dobText = documentModel.createTextNode(thisStudent.toStringDOB());
dobElement.appendChild(dobText);
listElement.appendChild(dobElement);
Element dogElement = documentModel.createElement("dog");
Text dogText = documentModel.createTextNode(thisStudent.toStringDOG());
dogElement.appendChild(dogText);
listElement.appendChild(dogElement);
Element gpaElement = documentModel.createElement("gpa");
Text gpaText = documentModel.createTextNode(thisStudent.toStringGPA());
gpaElement.appendChild(gpaText);
listElement.appendChild(gpaElement);
}
OutputFormat formatToOutput = new OutputFormat(documentModel);
formatToOutput.setIndenting(true);
XMLSerializer serializer = new XMLSerializer( new FileOutputStream( new File("studentlist.xml")), formatToOutput );
serializer.serialize(documentModel);
}catch(Exception e){
}
}
# 1 楼答案
这段代码运行良好,问题在于您没有向我们展示的代码中:class
Student
-您将那里的所有字段声明为static
,这意味着只有一个副本,当您创建“多个学生”时,每个新学生都会覆盖上一个副本的值在班上所有学生成员(姓名、地址等)之前删除
static
关键字,您的代码就会生效。下面是一个对代码进行了一些小修改的工作示例:输出文件: