java对XML文件的相关操作(dom4j)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对XML文件的相关操作(dom4j)相关的知识,希望对你有一定的参考价值。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <Person university="SCAU" location="GuangZhou"> 4 <student> 5 <name>tester1</name> 6 </student> 7 <student> 8 <name/>tester2 9 </student> 10 <student> 11 <input type="text" value="forTest"/> 12 </student> 13 <student> 14 <name>hello world!</name> 15 </student> 16 <student> 17 <DONT att1="value1" att2="value2">don‘t use in this way!!!</DONT> 18 </student> 19 </Person>
上面就是XML文件的内容。
生成XML文件的相关代码
1 public void create(){ 2 // 创建根节点 root 3 Element root = DocumentHelper.createElement("Person"); 4 Document document = DocumentHelper.createDocument(root); 5 6 // addAttribute 是指创建节点内的属性 7 // :<Person university="SCAU" location="GuangZhou"> 其中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 // 以这种方式添加节点的话,内容是这样子的:<name/>xiangxiao 17 // 有点类似 html 的 <input />标签。 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 void get(String filePath){ 6 try { 7 File xmlFile = new File(filePath); 8 SAXReader saxReader = new SAXReader(); 9 10 Document document = saxReader.read(xmlFile); 11 // 获取根节点 12 Element Person = document.getRootElement(); 13 14 // 获取根节点的直接子节点 15 for(Iterator i = Person.elementIterator();i.hasNext();){ 16 // <student>...</student> 17 Element student = (Element)i.next(); 18 for(Iterator j = student.elementIterator();j.hasNext();){ 19 // 子节点的直接子节点:<name>...</name> 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 void anotherGet(String filePath){ 6 try { 7 File xml = new File(filePath); 8 SAXReader saxReader = new SAXReader(); 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 // 在这个具体的例子中,就是 <student>、<student>.. 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的引用:
<!-- https://mvnrepository.com/artifact/dom4j/dom4j --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
在具体的编程中,import 进的外部包有 (因为可能会与其他的包重叠,所以也顺带写一下吧):
import org.dom4j.*;
import org.dom4j.io*;
第一次用博客园写代码,用的好不习惯……
2017.8.7
以上是关于java对XML文件的相关操作(dom4j)的主要内容,如果未能解决你的问题,请参考以下文章