1 <?xml version="1.0" encoding="UTF-8"?>
2
3
4
5 tester1
6
7
8 tester29
10
11
12
13
14 hello world!
15
16
17 don‘t use in this way!!!
18
19
上面就是XML文件的内容。
生成XML文件的相关代码
1 public voidcreate(){2 //创建根节点 root
3 Element root = DocumentHelper.createElement("Person");4 Document document =DocumentHelper.createDocument(root);5
6 //addAttribute 是指创建节点内的属性7 //: 其中university和location就是Person的属性。
8 root.addAttribute("university","SCAU");9 root.addAttribute("location","GuangZhou");10
11 //创建节点的方式。12 //而整个的dom树其实就是这么延伸下去的:将root看成一个节点,节点再添加节点(取数据的时候,套多个for循环就可以了)
13 Element e1 = root.addElement("student");14 e1.addElement("name").addText("tester1");15
16 //以这种方式添加节点的话,内容是这样子的:xiangxiao17 //有点类似 HTML 的 标签。18 //这么说,通过这种方式来添加节点的话,多数是以添加 attribute 为目的的
19 Element e2 = root.addElement("student");20 e2.addElement("name");21 e2.addText("tester2");22
23 //比如像下面这样
24 Element e3 = root.addElement("student");25 Element ei = e3.addElement("input");26 ei.addAttribute("type","text");27 ei.addAttribute("value","forTest");28
29 //下面这种添加节点的方式该是比较好理解的,
30 Element e4 = root.addElement("student");31 Element ex = e4.addElement("name");32 ex.addText("hello world!");33
34 //当然,也可以写下面这种一锅端的方式:
35 Element DONT_USE = root.addElement("student");36 DONT_USE.addElement("DONT").addAttribute("att1","value1").addAttribute("att2","value2").addText("don‘t use in this way!!!");37
38 OutputFormat format = new OutputFormat(" ",true);// 输出的格式,四个空格加换行,好像是约定俗称的吧39 format.setEncoding("UTF8");40 try{41 XMLWriter writer = new XMLWriter(new FileOutputStream("Person.xml"),format);42 writer.write(document);43 writer.close();44 } catch(Exception e){45 e.printStackTrace();46 }47 }
从XML文件取出数据
一:
1 /**
2 * 获取节点的方式一3 * 这种方式虽然看起来简单,但另一个方法更好理解一些4 */
5 public voidget(String filePath){6 try{7 File xmlFile = newFile(filePath);8 SAXReader saxReader = newSAXReader();9
10 Document document =saxReader.read(xmlFile);11 //获取根节点
12 Element Person =document.getRootElement();13
14 //获取根节点的直接子节点
15 for(Iterator i =Person.elementIterator();i.hasNext();){16 //...
17 Element student =(Element)i.next();18 for(Iterator j =student.elementIterator();j.hasNext();){19 //子节点的直接子节点:...
20 Element node =(Element)j.next();21 //获取节点的名字与内容:name:xiaoxiang
22 System.out.print(node.getName()+" : "+node.getTextTrim());23 }24 System.out.println();25 }26 } catch(Exception e){27 e.printStackTrace();28 }29 }
二:
1 /**
2 * 获取节点的方式二3 * 根据父节点直接获取所有的子节点,同时也能获取该节点的所有属性4 */
5 public voidanotherGet(String filePath){6 try{7 File xml = newFile(filePath);8 SAXReader saxReader = newSAXReader();9
10 Document document =saxReader.read(xml);11 Element Person =document.getRootElement();12
13 //获取节点 person 的所有属性14 //以键值对的形式打印
15 List attrList =Person.attributes();16 System.out.printf("this is attribute: \n");17 for (int i = 0; i < attrList.size(); i++) {18 Attribute item =(Attribute)attrList.get(i);19 System.out.println(item.getName()+ " : "+item.getValue());20 }21
22 //获取节点 person 的所有子节点23 //在这个具体的例子中,就是 、..
24 List nodeList =Person.elements();25 System.out.printf("this is element: \n");26 for (int i = 0; i < nodeList.size(); i++) {27 Element student =(Element)nodeList.get(i);28 //获取节点 node 的所有子节点
29 List contentList =student.elements();30 for (int j = 0; j < contentList.size(); j++) {31 Element contentNode =(Element)contentList.get(j);32 System.out.println(contentNode.getName()+" : "+contentNode.getTextTrim());33 }34 }35
36 //根据dom树的结构,决定循环的次数。37 //一般是两层循环;当然也有可能更多,主要取决于一开始的设计。
38 } catch(Exception e) {39 e.printStackTrace();40 }41 }
利用DOM4J对XML文件的基本操作大概就这么多,反正也不外乎读跟写嘛。
相关的 API (好像很久没更新的样子):http://www.oschina.net/uploads/doc/dom4j-1.6.1/index.html
maven的引用:
dom4j
dom4j
1.6.1
在具体的编程中,import 进的外部包有 (因为可能会与其他的包重叠,所以也顺带写一下吧):
import org.dom4j.*;
import org.dom4j.io*;
第一次用博客园写代码,用的好不习惯……
2017.8.7