问题描述
importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.XMLWriter;publicclassxml{publicvoidadd(Stringname,Stringsex){Documentdoc=DocumentHelper.createDocument();Elementstu_root=doc.addElement("Student");Elementstu_name=stu_root.addElement("name");stu_name.setText(name);Elementstu_sex=stu_root.addElement("sex");stu_sex.setText(sex);OutputFormatoutput=OutputFormat.createPrettyPrint();output.setEncoding("GB2312");try{XMLWriterwriter=newXMLWriter(newFileOutputStream(newFile("student.xml"),true),output);writer.write(doc);writer.close();}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}<?xmlversion="1.0"encoding="GB2312"?><Student><name>黎明</name><sex>男</sex></Student><?xmlversion="1.0"encoding="GB2312"?><Student><name>asd</name><sex>asd</sex></Student>为什么每次执行程序后,就会添加<?xmlversion="1.0"encoding="GB2312"?>这一句,求解答。谢谢
解决方案
解决方案二:
这个主要是你的参数使用问题XMLWriterwriter=newXMLWriter(newFileOutputStream(newFile("student.xml"),true),output);把参数true该为false就可以了true是append(追加模式),改为false就是覆盖模式了
解决方案三:
1.首先你这个add(Stringname,Stringsex)方法就是一个建立完整xml文件的方法。每次调用add(Stringname,Stringsex)方法,都会建立一个完整的xml文件,包含xml文件头。在代码中的这一句:writer.write(doc),我们来查看一下dom4j中相关的源代码,publicvoidwrite(Documentdoc)throwsIOException{writeDeclaration();if(doc.getDocType()!=null){indent();writeDocType(doc.getDocType());}for(inti=0,size=doc.nodeCount();i<size;i++){Nodenode=doc.node(i);writeNode(node);}writePrintln();if(autoFlush){flush();}}
也就是说每次使用write(Documentdoc)这个方法时候,都会默认增加xml头,即代码中红色部分。所以你每次执行程序都会添加那一句话。2.如楼上所说,true为append。运行add(Stringname,Stringsex)方法时,若为true,则在原xml文件后面拼接新的xml代码。若为false,则覆盖掉原来的xml代码。
解决方案四:
这就是xml定义的规范啊,,不写output.setEncoding("GB2312");默认是UTF-8
解决方案五:
我现在就是要第一次写入XML文件的时候加上文件头,而后面在写的时候不加xml文件头,也就是一个xml文件内只存在一个文件头,该如何解决?
解决方案六:
没遇到过这个问题,别人的回答算学习了
解决方案七:
遇到过这个问题,别人的回答算学习了
解决方案八:
楼主自己不是设置了output.setEncoding("GB2312");编码为GB2312吗不设置的话默认就是UTF-8
解决方案九:
引用4楼u012903028的回复:
我现在就是要第一次写入XML文件的时候加上文件头,而后面在写的时候不加xml文件头,也就是一个xml文件内只存在一个文件头,该如何解决?
那就不是一个完整的xml文件了,,直接通过浏览器打开会报错。