【java开发系列】—— JDOM建立、修改、删除、读取XML文件

有不少中操做XML文件的方法,这里介绍一下JDOM的使用方法和技巧。函数

JDOM下载地址ui

建立XML文档

  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文档

  读取文档,首先须要一个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文档

  修改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     }