在我的Web应用程序中,我希望使用jdom将记录从数据库表保存到xml文件,但问题是只保存了一条记录。
Test_xml.java
List<User> users = session.selectList("dao.UserDao.findAll") ;
for (User u : users) {
try {
Element company = new Element("user");
Document doc = new Document(company);
Element staff = new Element("data");
staff.setAttribute(new Attribute("id", u.getId()));
staff.setAttribute(new Attribute("name", u.getName()));
doc.getRootElement().addContent(staff);
XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, new FileWriter("c:\\user.xml"));
out.println("File Saved!");
} catch (IOException io) {
out.println(io.getMessage());
}
我希望有这样的结构:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<data id="1" name="Nancy" />
<data id="2" name="Jennifer" />
</user>
请帮助,谢谢。
答案 0 :(得分:1)
您将继续覆盖已保存的记录。您正在for循环中创建新的XMLOutputer,并使用它将一个用户保存到user.xml文件。
因此,您的文件将仅包含用户列表中的最后一个用户。
你需要在for循环之外创建Root元素,在循环内部附加到子节点(代码中的人员),然后在循环之后,使用XMLOutputer将整个文档输出到xml。
答案 1 :(得分:0)
要拥有这种结构,您可以这样做:
XMLOutputter xmlOutput = new XMLOutputter();
Element company = new Element("user");
Document doc = new Document(company);
for (User u : users) {
try {
Element staff = new Element("data");
staff.setAttribute(new Attribute("id", u.getId()));
staff.setAttribute(new Attribute("name", u.getName()));
doc.getRootElement().addContent(staff);
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, new FileWriter("c:\\user.xml"));
} catch (IOException io) {
//@todo manage your exception
}
}
如果你的id是int,你可以这样做:
staff.setAttribute(new Attribute("id",Integer.toString(u.getId())));