項目截圖:注意導入紅色方框內的兩個jar包。
三個函數,一個用於創建xml文件,一個用於修改xml文件,一個用於格式化xml文件。
import java.io.File; import java.io.FileWriter; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Dom4jXML { public static int createXMLFile(String filename){ /*返回操作結果*/ int returnValue = 0; /*建立document對象*/ Document document = DocumentHelper.createDocument(); /*建立XML文檔的根books*/ Element booksElement = document.addElement("books"); /*加入一行注釋*/ booksElement.addComment("This is a test for dom4j, ZHe, 2012.11.26"); /*加入第一個book節點*/ Element bookElement = booksElement.addElement("book"); /*加入show屬性內容*/ bookElement.addAttribute("show", "yes"); /*加入title節點*/ Element titleElement = bookElement.addElement("title"); /*為title設置內容*/ titleElement.setText("Dom4j Tutorials"); /*類似的完成后兩個book*/ bookElement = booksElement.addElement("book"); bookElement.addAttribute("show", "yes"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene Studing"); bookElement = booksElement.addElement("book"); bookElement.addAttribute("show", "no"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene in Action"); /*加入owner節點*/ Element ownerElement = booksElement.addElement("owner"); ownerElement.setText("Zhang He"); try{ /*將document中的內容寫入文件中*/ XMLWriter writer = new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); /*執行成功,返回1*/ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } public static int modifyXMLFile(String filename, String newfilename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); /*修改內容之一:如果book結點中show屬性內容是yes,則修改成no*/ /*先用xpath查找對象*/ List list = document.selectNodes("/books/book/@show"); Iterator iter = list.iterator(); while(iter.hasNext()){ Attribute attribute = (Attribute)iter.next(); if(attribute.getValue().equals("yes")){ attribute.setValue("no"); } } /* * *修改內容之二:把owner項內容改為CheeseZH * 並在owner節點中加入date節點,date節點的內容為2012-11-27 * 還要為date節點添加一個屬性type */ list = document.selectNodes("books/owner"); iter = list.iterator(); if(iter.hasNext()){ Element ownerElement = (Element)iter.next(); ownerElement.setText("CheeseZH"); Element dateElement = ownerElement.addElement("date"); dateElement.setText("2012-11-27"); dateElement.addAttribute("type", "Gregoran calendar"); } /*修改內容之三:若title內容為Dom4j Tutorials,則刪除該節點*/ list = document.selectNodes("/books/book"); iter = list.iterator(); while(iter.hasNext()){ Element bookElement = (Element)iter.next(); Iterator iterator = bookElement.elementIterator("title"); while(iterator.hasNext()){ Element titleElement = (Element)iterator.next(); if(titleElement.getText().equals("Dom4j Tutorials")){ bookElement.remove(titleElement); } } } try{ /*將document中的內容寫入文件中*/ XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename))); writer.write(document); writer.close(); /*執行成功,返回1*/ returnValue = 1; }catch(Exception ex){ ex.printStackTrace(); } }catch(Exception ex){ ex.printStackTrace(); } return returnValue; } public static int formatXMLFile(String filename){ int returnValue = 0; try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); XMLWriter writer = null; /*格式化輸出,類似IE瀏覽器一樣*/ OutputFormat format = OutputFormat.createPrettyPrint(); /*指定XML編碼*/ format.setEncoding("GB2312"); writer = new XMLWriter(new FileWriter(new File(filename)),format); writer.write(document); writer.close(); /*執行成功,返回1*/ returnValue = 1; }catch(Exception ex){ } return returnValue; } public static void main(String[] args){ createXMLFile("zhanghe.xml"); modifyXMLFile("zhanghe.xml","CheeseZH.xml"); formatXMLFile("zhanghe.xml"); } }
1.創建Document對象(xml對象),用addElement添加根節點(Element對象);
2.Element對象三個重要方法:
addComment:添加注釋
addAttribute:添加屬性
addElement:添加子元素
3.XMLWriter用於生成物理文件,默認使用OutputFormat類的createCompactFormat(),可以使用createPrettyPrint()
4.List list = document.selectNodes("/books/book");是通過xpath查找相應內容
關於Xpath語法,可以參考:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791983.html
5.setValue(),setText()可以修改結點內容,remove()可以刪除結點或者屬性
6.OutputFormat format = OutputFormat.createPrettyPrint();指定了格式化方式為縮進式,而非緊湊式;
format.setEncoding("GB2312");用於指定編碼
之后的XMLWriter生成物理文件時,多了一個OutputFormat對象作為參數