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

时间: 2024-08-05 12:31:26

java对XML文件的相关操作(dom4j)的相关文章

Xml文件的相关操作

Xml文档很久没有用过了,今天开开鲜,新手专区,不喜勿喷,运用的是WinForm编写 XMl文件的创建 /// <summary> /// 创建Xml文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCreateXml_Click(object send

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

php对xml文件进行CURD操作

XML是一种数据存储.交换.表达的标准: - 存储:优势在于半结构化,可以自定义schema,相比关系型二维表,不用遵循第一范式(可以有嵌套关系): - 交换:可以通过schema实现异构数据集成: - 表达:本身就可以作为阅读文档,当然还可以使用XSLT之类的进行解析和再显示. 缺点是schema验证复杂,相比后来的json等格式,相对冗余. 下面的是利用php对xml文件进行CURD操作: xml文件的格式为: 1 <?xml version="1.0" encoding=&

java读取XML文件的四种方式

java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区&

关于C#资源文件的相关操作

关于资源文件的相关操作. //1.比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 //比较典型的做法是通过代码程序集加载指定资源 //如下通过Assembly的静态方法GetExecutingAssembly()得到程序集 //还有很多方式可以得到代码程序集 System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); Stream manifestResourceStream

java解析xml文件并输出

使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class

自定义类库:Java转换xml文件转化pojo工具

一.之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo. 二.编写xml转化工具类XmlUtils package com.moy.demo.common.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.InputStream; import java.io.Reader; import jav