【java開發系列】— JDOM建立、修改、刪除、讀取XML檔案
阿新 • • 發佈:2019-01-31
有很多中操作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 }