当前位置:编程学习 > JAVA >>

关于dom4j创建xml文件疑问

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


public class xml {
public void add(String name,String sex){
Document doc=DocumentHelper.createDocument();
Element stu_root=doc.addElement("Student");
Element stu_name=stu_root.addElement("name");
stu_name.setText(name);
Element stu_sex=stu_root.addElement("sex");
stu_sex.setText(sex);
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("GB2312");
try {
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("student.xml"),true),output);
writer.write(doc);
writer.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}
<?xml version="1.0" encoding="GB2312"?>

<Student>
  <name>黎明</name>
  <sex>男</sex>
</Student>
<?xml version="1.0" encoding="GB2312"?>

<Student>
  <name>asd</name>
  <sex>asd</sex>
</Student>
为什么每次执行程序后,就会添加<?xml version="1.0" encoding="GB2312"?>这一句,求解答。谢谢 --------------------编程问答-------------------- 这个主要是你的参数使用问题
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("student.xml"),true),output);
把参数true该为false就可以了 true是append(追加模式),改为false就是覆盖模式了 --------------------编程问答-------------------- 1.首先你这个add(String name,String sex)方法就是一个建立完整xml文件的方法。每次调用add(String name,String sex)方法,都会建立一个完整的xml文件,包含xml文件头。在代码中的这一句:writer.write(doc),我们来查看一下dom4j中相关的源代码,

public void write(Document doc) throws IOException {
        writeDeclaration();  

        if (doc.getDocType() != null) {
            indent();
            writeDocType(doc.getDocType());
        }

        for (int i = 0, size = doc.nodeCount(); i < size; i++) {
            Node node = doc.node(i);
            writeNode(node);
        }

        writePrintln();

        if (autoFlush) {
            flush();
        }
    }

也就是说每次使用write(Document doc)这个方法时候,都会默认增加xml头,即代码中红色部分。所以你每次执行程序都会添加那一句话。
2.如楼上所说,true为append。运行add(String name,String sex)方法时,若为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文件了,,直接通过浏览器打开会报错。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,