dom4j建立,修改XML文档,并解决格式化输出和中文【转】

  1 package com.holen.dom4j;
  2 import java.io.File;
  3 import java.io.FileWriter;
  4 import java.util.Iterator;
  5 import java.util.List;
  6 import org.dom4j.Attribute;
  7 import org.dom4j.Document;
  8 import org.dom4j.DocumentHelper;
  9 import org.dom4j.Element;
 10 import org.dom4j.io.OutputFormat;
 11 import org.dom4j.io.SAXReader;
 12 import org.dom4j.io.XMLWriter;
 13 /**
 14  * @author Holen Chen
 15  */
 16 public class Dom4jDemo {
 17    
 18     public Dom4jDemo() {
 19     }
 20    
 21     /**
 22      * 建立一个XML文档,文档名由输入参数决定
 23      * @param filename 需建立的文件名
 24      * @return 返回操作结果, 0表失败, 1表成功
 25      */
 26     public int createXMLFile(String filename){
 27        /** 返回操作结果, 0表失败, 1表成功 */
 28        int returnValue = 0;
 29        /** 建立document对象 */
 30         Document document = DocumentHelper.createDocument();
 31        /** 建立XML文档的根books */
 32         Element booksElement = document.addElement("books");
 33        /** 加入一行注释 */
 34         booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
 35        /** 加入第一个book节点 */
 36         Element bookElement = booksElement.addElement("book");
 37        /** 加入show参数内容 */
 38         bookElement.addAttribute("show","yes");
 39        /** 加入title节点 */
 40         Element titleElement = bookElement.addElement("title");
 41        /** 为title设置内容 */
 42         titleElement.setText("Dom4j Tutorials");
 43       
 44        /** 类似的完成后两个book */
 45         bookElement = booksElement.addElement("book");
 46         bookElement.addAttribute("show","yes");
 47         titleElement = bookElement.addElement("title");
 48         titleElement.setText("Lucene Studing");
 49         bookElement = booksElement.addElement("book");
 50         bookElement.addAttribute("show","no");
 51         titleElement = bookElement.addElement("title");
 52         titleElement.setText("Lucene in Action");
 53       
 54        /** 加入owner节点 */
 55         Element ownerElement = booksElement.addElement("owner");
 56         ownerElement.setText("O'Reilly");
 57       
 58        try{
 59            /** 将document中的内容写入文件中 */
 60            XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
 61            writer.write(document);
 62            writer.close();
 63            /** 执行成功,需返回1 */
 64            returnValue = 1;
 65         }catch(Exception ex){
 66            ex.printStackTrace();
 67        }
 68               
 69         return returnValue;
 70     }
 71    
 72     /**
 73      * 修改XML文件中内容,并另存为一个新文件
 74      * 重点掌握dom4j中如何添加节点,修改节点,删除节点
 75      * @param filename 修改对象文件
 76      * @param newfilename 修改后另存为该文件
 77      * @return 返回操作结果, 0表失败, 1表成功
 78      */
 79     public int ModiXMLFile(String filename,String newfilename){
 80        int returnValue = 0;
 81        try{
 82            SAXReader saxReader = new SAXReader();   
 83            Document document = saxReader.read(new File(filename));
 84            /** 修改内容之一:如果book节点中show参数的内容为yes,则修改成no */
 85            /** 先用xpath查找对象 */
 86            List list = document.selectNodes("/books/book/@show" );   
 87            Iterator iter = list.iterator();
 88            while(iter.hasNext()){
 89                Attribute attribute = (Attribute)iter.next();
 90                if(attribute.getValue().equals("yes")){
 91                    attribute.setValue("no");
 92                }  
 93            }
 94           
 95            /**
 96             * 修改内容之二:把owner项内容改为Tshinghua
 97             * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个参数type
 98             */
 99            list = document.selectNodes("/books/owner" );
100            iter = list.iterator();
101            if(iter.hasNext()){
102                Element ownerElement = (Element)iter.next();
103                ownerElement.setText("Tshinghua");
104                Element dateElement = ownerElement.addElement("date");
105                dateElement.setText("2004-09-11");
106                dateElement.addAttribute("type","Gregorian calendar");
107            }
108           
109            /** 修改内容之三:若title内容为Dom4j Tutorials,则删除该节点 */
110            list = document.selectNodes("/books/book");
111            iter = list.iterator();
112            while(iter.hasNext()){
113                Element bookElement = (Element)iter.next();
114                Iterator iterator = bookElement.elementIterator("title");
115                while(iterator.hasNext()){
116                    Element titleElement=(Element)iterator.next();
117                    if(titleElement.getText().equals("Dom4j Tutorials")){
118                       bookElement.remove(titleElement);
119                   }
120                }
121            }          
122           
123            try{
124                /** 将document中的内容写入文件中 */
125                XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
126                writer.write(document);
127                writer.close();
128                /** 执行成功,需返回1 */
129                returnValue = 1;
130            }catch(Exception ex){
131                ex.printStackTrace();
132            }
133           
134         }catch(Exception ex){
135            ex.printStackTrace();
136        }
137         return returnValue;
138     }
139    
140     /**
141      * 格式化XML文档,并解决中文问题
142      * @param filename
143      * @return
144      */
145     public int formatXMLFile(String filename){
146        int returnValue = 0;
147        try{
148            SAXReader saxReader = new SAXReader();   
149            Document document = saxReader.read(new File(filename));
150            XMLWriter output = null;
151            /** 格式化输出,类型IE浏览一样 */
152            OutputFormat format = OutputFormat.createPrettyPrint();
153            /** 指定XML字符集编码 */
154            format.setEncoding("GBK");
155            output = new XMLWriter(new FileWriter(new File(filename)),format);
156            output.write(document);
157            output.close();       
158            /** 执行成功,需返回1 */
159            returnValue = 1;      
160         }catch(Exception ex){
161            ex.printStackTrace();
162        }
163         return returnValue;
164     }
165     public static void main(String[] args) {
166         Dom4jDemo temp = new Dom4jDemo();
167         System.out.println(temp.createXMLFile("d://holen.xml"));
168         System.out.println(temp.ModiXMLFile("d://holen.xml","d://holen2.xml"));
169         System.out.println(temp.formatXMLFile("d://holen2.xml"));
170     }
171 }
原文地址:https://www.cnblogs.com/macula/p/2617185.html