Java 向Xml添加成员对象的JDOM Xml

Java 向Xml添加成员对象的JDOM Xml,java,xml,jdom,Java,Xml,Jdom,我有点小问题。 我在一个俱乐部里做一个简单的会员制。 在系统中,您应该能够注册新用户,并注册用户。 然后使用JDOM将其保存到.xml文件中。我遵循了以下网站的指南: 问题是,当调用在xml文件中添加成员的方法时,它会写入一个新文件。是的,有一次这不是问题,但为了能够在关闭应用程序后在成员之后添加成员,它将被覆盖,新成员将取代。这不是我想要的 我希望每次添加新成员时,在现有xml文件中最后添加的元素末尾添加的成员都是no文件,然后创建文件或其他内容。 希望能得到像你这样更有经验的人的帮助;)

我有点小问题。 我在一个俱乐部里做一个简单的会员制。 在系统中,您应该能够注册新用户,并注册用户。 然后使用JDOM将其保存到.xml文件中。我遵循了以下网站的指南:

问题是,当调用在xml文件中添加成员的方法时,它会写入一个新文件。是的,有一次这不是问题,但为了能够在关闭应用程序后在成员之后添加成员,它将被覆盖,新成员将取代。这不是我想要的

我希望每次添加新成员时,在现有xml文件中最后添加的元素末尾添加的成员都是no文件,然后创建文件或其他内容。 希望能得到像你这样更有经验的人的帮助;)


雅各布·Wångö
199107270077
帆船
30米
xmlns=“memberID=”null”>
无名氏
公共类控制器{
查看视图;
成员模型;
船模型;
静态字符串file=“BoatClubSystem.xml”;
静态列表成员列表=新的ArrayList();
静态列表boatlist=newarraylist();
公共静态void main(字符串[]args)引发IOException{
成员m=新成员();
成员m2=新成员();
船b=新船();
船b2=新船();
m、 setName(“Jakob Wangoe”);
m、 setPersonID(“19910727****”);
成员名单。添加(m);
b、 立根型(1);
b、 立根长度(30);
添加(b)条;
createXMLSystem(成员列表、船艇列表);
}
公共静态void createXMLSystem(List memberList,List boatlist)引发IOException{
单据单据=新单据();
doc.setRootElement(新元素(“成员”),
getNamespace(“boatclubsystem成员”);
对于(成员memb:memberList){
元素成员=新元素(“成员”);
member.addContent(新元素(“memberID”).setText(memb.getMemberID());
member.addContent(新元素(“name”).setText(“+memb.getName()));
member.addContent(新元素(“personalID”).setText(memb.getPersonID());
(船名:船夫){
元素船=新元素(“船”);
boats.addContent(新元素(“boatType”).setText(boat.getBoatType());
boats.addContent(新元素(“boatLenght”).setText(boat.getBoatLenght()+“m”);
成员:addContent(船只);
} 
doc.getRootElement().addContent(成员);
} 
//JDOM文档准备就绪,写入文件
XMLOutputter XMLOutputter=新的XMLOutputter(Format.getPrettyFormat());
output(doc,新文件outputstream(file));
} 
}  

JDOM是用于XML表示的内存模型,XMLOutputer代码将内存模型转储到输出(磁盘上的文件)

您需要的是首先将XML加载到内存中。如果文件存在于磁盘上,则从文件中加载。如果文件不存在,则必须构建一个空文件

手动构建一个空的JDOM文档可能会使代码变得非常复杂。因此我有一个技巧,但您的基本代码块应该是:

Document doc = null;
SAXBuilder builder = new SAXBuilder();
if (file.exists()) {
    doc = builder.build(file);
} else {
    // build a fresh document
    ....
}

// build a new member....

....

// add it to the document
Element members = doc.getRootElement();
members.addContent(newMember);

XMLOutputter xmlout = new XMLOutputter(Format.getPrettyFormat());
try (FileOutputStream fos = new FileOutputStream(file)) {
    xmlout.output(fos, doc);
} catch (IOException ...) {
}
我在创建空文档时经常使用的一个技巧是使用Jar资源……然后将该输入流用作种子:

doc = builder.build(ClassLoader.getSystemResource("my/package/EmptyMembers.xml"));

使用上述方法,您可以将空文档编辑为文本,而不是按组件进行构建。

我认为您需要先读取文件(如果有),更改它,然后再保存。检查此链接是的,实际上我现在正在查看该页面。但问题是,我尝试合并两个示例,但没有成功。我链接的指南使用JDOM 2,但另一个添加现有xml文件的示例使用了另一个dom文档。因此我可以理解如何合并这些文档se Two然后尝试Okey,它非常适合查看xml文件中的所有成员。然后我想添加更多成员,我只是想出了一个主意,但我认为它不是超级有效的,可能是一些资源抢夺者。在我将新成员写入xml文件之前,我将文件中当前的所有成员加载到一个列表中,然后将其全部写回,旧的和新创建的成员。?好的,是的,实际上这似乎是正确的方法。我本来想在构建它时先有一个空文档,但实际上可以对它进行编码:D我要试试Trikone问题。这里应该是什么?//将它添加到文档元素members=…(?)members.addContent(newMember);您的XML相对简单,
成员将是
doc.getRootElement()
。我已将其添加到上面的答案中。Ahaa。正如我所想。好的,我有一个小问题,file.exists()中的文件是什么;?我有以下问题:
Document doc=null;SAXBuilder=new SAXBuilder();if(file.exists()){doc=builder.build(fileName);}else{Document newDoc=new Document();doc.setRootElement(新元素(“成员”,Namespace.getNamespace(“boatclubsystem成员”));}
我不应该实例化一个文件File=new File();?是的,你应该有一个
文件
实例,或者使用