dom4j 中文寫入xml文件時出現亂碼 及添加新節點

首先咱們看看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();
                }
          
    }
}
相關文章
相關標籤/搜索