首先咱们看看dom4j是如何实现编码处理的java
public XMLWriter(OutputStream out) throws UnsupportedEncodingException { //System.out.println("In OutputStream"); this.format = DEFAULT_FORMAT; this.writer = createWriter(out, format.getEncoding()); this.autoFlush = true; namespaceStack.push(Namespace.NO_NAMESPACE); } public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException { //System.out.println("In OutputStream,OutputFormat"); this.format = format; this.writer = createWriter(out, format.getEncoding()); this.autoFlush = true; namespaceStack.push(Namespace.NO_NAMESPACE); } protected Writer createWriter(OutputStream outStream, String encoding) throws UnsupportedEncodingException { return new BufferedWriter( new OutputStreamWriter( outStream, encoding ) ); }
由上面的代码咱们能够看出dom4j对编码并无进行什么很复杂的处理,彻底经过java自己的功能来完成。因此咱们在使用dom4j的来生成咱们的XML文件时不该该直接为在构建XMLWriter时,不该该直接为其赋一个Writer对象,而应该经过一个OutputStream的子类对象来构建。也就是说在咱们上面的代码中,不该该用FileWriter对象来构建xml文档,而应该使用FileOutputStream对象来构建dom
一个例子ide
向一个已有的xml文件中添加this
package ytu.botao.util; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * 添加xml节点信息 * * @author botao * */ public class AddXmlElement { /** * 给定9个参数 * @param id * @param title * @param keyword * @param kind * @param describe * @param date * @param url * @param author * @param piblish */ public static void addXmlElement(String id, String title, String keyword, String kind, String describe, String date, String url, String author, String publisher) { // 向test.xml中添加新上传文档是信息 try { SAXReader saxReader = new SAXReader(); Document doc = saxReader.read("test.xml"); Element rooElement = doc.getRootElement(); // 新加节点 Element addElement = DocumentHelper.createElement("resourceitem"); Element idElement = addElement.addElement("id"); idElement.setText(id); Element titleElement = addElement.addElement("title"); titleElement.setText(title); Element keywordElement = addElement.addElement("keywords"); System.err.println("keyword" + keyword); keywordElement.setText(keyword); Element kindElement = addElement.addElement("kind"); kindElement.setText(kind); Element describeElement = addElement.addElement("describe"); describeElement.setText(describe); Element dateElement = addElement.addElement("date"); dateElement.setText(date); Element urlElement = addElement.addElement("url"); urlElement.setText(url); Element authorElement = addElement.addElement("author"); authorElement.setText(author); Element publisherElement = addElement.addElement("publisher"); publisherElement.setText(publisher); rooElement.add(addElement); try { //********1写入中文不会出现乱码 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("test.xml"), new OutputFormat().createPrettyPrint()); xmlWriter.write(doc); //**********2写入中文会出现乱码 // XMLWriter xmlWriter = new XMLWriter(new FileWriter("test.xml"), // new OutputFormat().createPrettyPrint()); // xmlWriter.write(doc); // xmlWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }