1. 程式人生 > >【java開發系列】— JDOM建立、修改、刪除、讀取XML檔案

【java開發系列】— JDOM建立、修改、刪除、讀取XML檔案

有很多中操作XML檔案的方法,這裡介紹一下JDOM的使用方法和技巧。

建立XML文件

XML檔案是一種典型的樹形檔案,每個文件元素都是一個document元素的子節點。而每個子元素都是一個Element物件,物件可以向下包含。

1 因此我們可以通過先建立元素再將元素新增到父元素中,最後將頂層元素新增到根元素中。

2 建立完文件元素後,就可以把元素新增到document物件中,然後寫入檔案。

主要使用的函式:

Element.setAttribute 為元素新增資訊

Element.addContent(String,String) 為元素新增子元素內容,也可以直接新增另一個元素節點

Document.setRootElement(Element) 為文件新增根元素

XMLOutputter.output(Document,FileWriter) 將Docuemnt寫入到FileWriter檔案流中

下面是主要的操作過程,寫入檔案的過程放到了saveXML中

 1     @SuppressWarnings("null")
 2     public static void createXML() {
 3         // 建立document
 4         Document mydoc = new Document();
 5 
 6         // 建立元素person1
 7         Element person1 = new Element("person");
 8         person1.setAttribute("id", "ID001");
 9
// 添加註釋 10 person1.addContent(new Comment("this is person1")); 11 12 person1.addContent(new Element("name").setText("xingoo")); 13 person1.addContent(new Element("age").setText("25")); 14 person1.addContent(new Element("sex").setText("M")); 15 // 可以巢狀新增子元素
16 Element address1 = new Element("address"); 17 address1.setAttribute("zone", "province"); 18 address1.addContent("LiaoNing"); 19 person1.addContent(address1); 20 21 // 建立元素person2 22 Element person2 = new Element("person"); 23 person2.setAttribute("id", "ID002"); 24 // 添加註釋 25 person2.addContent(new Comment("this is person2")); 26 27 person2.addContent(new Element("name").setText("xhalo")); 28 person2.addContent(new Element("age").setText("26")); 29 person2.addContent(new Element("sex").setText("M")); 30 // 可以巢狀新增子元素 31 Element address2 = new Element("address"); 32 address2.setAttribute("zone", "province"); 33 address2.addContent("JiLin"); 34 person2.addContent(address2); 35 36 // 在doc中新增元素Person 37 Element info = new Element("information"); 38 info.addContent(person1); 39 info.addContent(person2); 40 mydoc.setRootElement(info); 41 42 saveXML(mydoc); 43 }

saveXML()程式碼:

 1     public static void saveXML(Document doc) {
 2         // 將doc物件輸出到檔案
 3         try {
 4             // 建立xml檔案輸出流
 5             XMLOutputter xmlopt = new XMLOutputter();
 6 
 7             // 建立檔案輸出流
 8             FileWriter writer = new FileWriter("person.xml");
 9 
10             // 指定文件格式
11             Format fm = Format.getPrettyFormat();
12             // fm.setEncoding("GB2312");
13             xmlopt.setFormat(fm);
14 
15             // 將doc寫入到指定的檔案中
16             xmlopt.output(doc, writer);
17             writer.close();
18         } catch (Exception e) {
19             e.printStackTrace();
20         }
21     }

執行後,重新整理專案,就可以在專案下看到person.xml檔案了。

讀取XML文件

讀取文件,首先需要一個xml的解析器,它可以自動的解析出各個元素,並且把子元素作為自己的孩子節點,方便操作。

主要使用的函式:

SAXBuilder.build("xxx.xml") 解析XML文件

Document.getRootElement() 獲取根元素

Element.getChildren() 獲取根元素下的子元素,返回List<Element>

Element.getAttributeValue(String) 獲取指定元素的資訊

Element.getChildText 獲取指定元素的內容
 1     public static void readXML() {
 2         // 使用SAXBuilder解析器解析xml檔案
 3         SAXBuilder sb = new SAXBuilder();
 4         Document doc = null;
 5         try {
 6             doc = sb.build("person.xml");
 7             Element root = doc.getRootElement();
 8             List<Element> list = root.getChildren("person");
 9             for (Element el : list) {
10                 String id = el.getAttributeValue("id");
11                 String name = el.getChildText("name");
12                 String age = el.getChildText("age");
13                 String sex = el.getChildText("sex");
14                 System.out.println("id:" + id);
15                 System.out.println("name:" + name);
16                 System.out.println("age:" + age);
17                 System.out.println("sex:" + sex);
18                 System.out.println("--------------------------");
19             }
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }

修改XML文件

修改XML文件,也是先利用解析器找到指定的元素,使用 setText 或者setAttributeValue 來修改元素內容

修改後記得要儲存到檔案中,即在此呼叫saveXML()

 1     public static void updateXML(){
 2         SAXBuilder sb = new SAXBuilder();
 3         Document doc = null;
 4         try {
 5             doc = sb.build("person.xml");
 6             Element root = doc.getRootElement();
 7             List<Element> list = root.getChildren("person");
 8             for (Element el : list) {
 9                 if (el.getAttributeValue("id").equals("ID001")) {
10                     Element name = el.getChild("name");
11                     name.setText("xingoo---update");
12                 }
13             }
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17         saveXML(doc);
18     }

刪除XML文件元素

刪除操作類似修改,呼叫 removeCotent 就可以根據內容刪除指定的元素了。但是要用他的父節點呼叫。最後也需要儲存到檔案中才可以。

 1     public static void removeXML() {
 2         SAXBuilder sb = new SAXBuilder();
 3         Document doc = null;
 4         try {
 5             doc = sb.build("person.xml");
 6             Element root = doc.getRootElement();
 7             List<Element> list = root.getChildren("person");
 8             for (Element el : list) {
 9                 if (el.getAttributeValue("id").equals("ID001")) {
10                     root.removeContent(el);
11                 }
12             }
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16         saveXML(doc);
17     }