有不少中操做XML文件的方法,這裏介紹一下JDOM的使用方法和技巧。函數
JDOM下載地址ui
XML文件是一種典型的樹形文件,每一個文檔元素都是一個document元素的子節點。而每一個子元素都是一個Element對象,對象能夠向下包含。this
1 所以咱們能夠經過先建立元素再將元素添加到父元素中,最後將頂層元素添加到根元素中。spa
2 建立完文檔元素後,就能夠把元素添加到document對象中,而後寫入文件。code
主要使用的函數:orm
Element.setAttribute 爲元素添加信息 Element.addContent(String,String) 爲元素添加子元素內容,也能夠直接添加另外一個元素節點 Document.setRootElement(Element) 爲文檔添加根元素 XMLOutputter.output(Document,FileWriter) 將Docuemnt寫入到FileWriter文件流中
下面是主要的操做過程,寫入文件的過程放到了saveXML中xml
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文件了。blog
讀取文檔,首先須要一個xml的解析器,它能夠自動的解析出各個元素,而且把子元素做爲本身的孩子節點,方便操做。rem
主要使用的函數:
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文檔,也是先利用解析器找到指定的元素,使用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 }
刪除操做相似修改,調用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 }