有很多中操作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 voidcreateXML() {3 //创建document
4 Document mydoc = newDocument();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 voidsaveXML(Document doc) {2 //将doc对象输出到文件
3 try{4 //创建xml文件输出流
5 XMLOutputter xmlopt = newXMLOutputter();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() 获取根元素下的子元素,返回ListElement.getAttributeValue(String) 获取指定元素的信息
Element.getChildText 获取指定元素的内容
1 public static voidreadXML() {2 //使用SAXBuilder解析器解析xml文件
3 SAXBuilder sb = newSAXBuilder();4 Document doc = null;5 try{6 doc = sb.build("person.xml");7 Element root =doc.getRootElement();8 List 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 voidupdateXML(){2 SAXBuilder sb = newSAXBuilder();3 Document doc = null;4 try{5 doc = sb.build("person.xml");6 Element root =doc.getRootElement();7 List 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 voidremoveXML() {2 SAXBuilder sb = newSAXBuilder();3 Document doc = null;4 try{5 doc = sb.build("person.xml");6 Element root =doc.getRootElement();7 List 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 }