我是靠谱客的博主 欣喜大碗,这篇文章主要介绍JAVA对XML文件的读写(有具体的代码和解析),现在分享给大家,希望可以做个参考。

转载地址:https://www.cnblogs.com/yangliguo/p/7398996.html

XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享。

xml指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
以下为例:

在XML中,所有的处理指令都以结束。<?后面紧跟的是处理指令的名称。

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对
需要处理这个元素的应用程序来说却很重要。
XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。
如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。

进入主题了

首先要有一个xml文件为名字为emplist.xml内容如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id=""> <name>张三</name> <age></age> <gender></gender> <salary>5000</salary> </emp> </list>

XML解析方式

SAX解析方式

SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。 其优缺点分别为:
优点: 解析可以立即开始,速度快,没有内存压力
缺点: 不能对节点做修改

DOM解析方式


DOM:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。DOM解析器在解析XML文档时,会把文档中
的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。其优缺点分别为:
优点: 把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点:  如果文件比较大,内存有压力,解析的时间会比较长

SAXReader读取XML文档

使用SAXReader需要导入dom4j-full.jar包。其是DOM4J的一个核心API,用于读取XML文档。
DOM4J是一个Java的XML API,类似于JDOM,用来读写XML文件的。DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强
大和极端易用使用的特点,同时它也是一个开放源代码的软件。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package day12; import java.io.File; import java.util.ArrayList; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用DOM解析xml文档 * @author ylg * */ public class ParseXmlDemo { public static void main(String[] args) { try { /* * 解析XML大致流程 * 1:创建SAXReader * 2:使用SAXReader读取数据源(xml文档信息) * 并生成一个Document对象,该对象即表示 * xml文档内容。DOM耗时耗内存资源也是在 * 这一步体现的。因为会对整个XML文档进行 * 读取并载入内存。 * 3:通过Document对象获取根元素 * 4:根据XML文档结构从根元素开始逐层获取 * 子元素最终以达到遍历XML文档内容的目的 * */ //1 SAXReader reader = new SAXReader(); //2 Document doc = reader.read(new File("emplist.xml")); /* * 3 * Document提供了方法: * Element getRootElement() * 该方法是用来获取XML文档中的根元素, * 对于emplist.xml文档而言,根元素就是 * <list>标签。 * * Element类 * 每一个Element实例都可以表示XML文档中的 * 一个元素,即:一对标签。 */ Element root = doc.getRootElement(); /* * Element提供了方法: * String getName() * 该方法可以获取当前元素的名字(标签名) */ System.out.println( "获取了根元素:"+root.getName() ); //4 /* * 获取一个元素中的子元素 * Element提供了相关方法: * * 1 * Element element(String name) * 获取当前元素下指定名字的子元素。 * * 2: * List elements() * 获取当前元素下所有子元素 * * 3: * List elements(String name) * 获取当前元素下所有同名子元素 * * 2,3返回的集合中的每一个元素都是Element * 的实例,每个实例表示其中的一个子元素。 * */ //获取所有emp标签 List<Element> list = root.elements(); //用于保存所有员工信息的List集合 List<Emp> empList = new ArrayList<Emp>(); for(Element empEle : list){ // System.out.println(empEle.getName()); //获取员工名字 Element nameEle = empEle.element("name"); /* * Element还提供了获取当前元素中文本的方法: * String getText(),String getTextTrim() */ String name = nameEle.getText(); System.out.println("name:"+name); //获取员工年龄 int age = Integer.parseInt( empEle.elementText("age") ); //获取性别 String gender = empEle.elementText("gender"); //获取工资 int salary = Integer.parseInt( empEle.elementText("salary") ); /* * Attribute attribute(String name) * 获取当前元素(标签)中指定名字的属性 * * Attribute的每一个实例用于表示一个 * 属性。其中常用方法: * String getName():获取属性名 * String getValue():获取属性值 */ Attribute attr = empEle.attribute("id"); int id = Integer.parseInt( attr.getValue() ); Emp emp = new Emp(id,name,age,gender,salary); empList.add(emp); } System.out.println("解析完毕!"); for(Emp emp : empList){ System.out.println(emp); } } catch (Exception e) { e.printStackTrace(); } } }

写XML

构建Document对象
使用DOM4J我们还可以通过自行构建Document对象,并组建树状结构来描述一个XML文档,并使用DOM4J将其写入一个文件。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * 使用DOM生成XML文档 * @author ylg * */ public class WriteXmlDemo { public static void main(String[] args) { List<Emp> list = new ArrayList<Emp>(); list.add(new Emp(1,"张三",25,"男",5000)); list.add(new Emp(2,"李四",26,"女",6000)); list.add(new Emp(3,"王五",27,"男",7000)); list.add(new Emp(4,"赵六",28,"女",8000)); list.add(new Emp(5,"钱七",29,"男",9000)); /* * 使用DOM生成XML文档的大致步骤: * 1:创建一个Document对象表示一个空文档 * 2:向Document中添加根元素 * 3:按照文档应有的结构从根元素开始顺序添加 * 子元素来形成该文档结构。 * 4:创建XmlWriter对象 * 5:将Document对象写出 * 若写入到文件中则形成一个xml文件 * 也可以写出到网络中作为传输数据使用 */ //1 Document doc = DocumentHelper.createDocument(); /* * 2 * Document提供了添加根元素的方法: * Element addElement(String name) * 向当前文档中添加指定名字的根元素,返回 * 的Element就表示这个根元素。 * 需要注意,该方法只能调用一次,因为一个 * 文档只能有一个根元素。 */ Element root = doc.addElement("list"); //3 for(Emp emp : list){ /* * Element也提供了追加子元素的方法: * Element addElement(String name) * 调用次数没有限制,元素可以包含若干 * 子元素。 */ Element empEle = root.addElement("emp"); //添加name信息 Element nameEle = empEle.addElement("name"); nameEle.addText(emp.getName()); //添加age信息 Element ageEle = empEle.addElement("age"); ageEle.addText(emp.getAge()+""); //添加gender信息 Element genderEle = empEle.addElement("gender"); genderEle.addText(emp.getGender()); //添加salary信息 Element salEle = empEle.addElement("salary"); salEle.addText(emp.getSalary()+""); /* * 向当前元素中添加指定名字以及对应值的属性 */ empEle.addAttribute("id", emp.getId()+""); } try{ //4 XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint()); FileOutputStream fos = new FileOutputStream("myemp.xml"); writer.setOutputStream(fos); //5 writer.write(doc); System.out.println("写出完毕!"); writer.close(); }catch(Exception e){ e.printStackTrace(); } } }

注意事项:

XPath 路径表达式
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。由于我们单纯使用dom定位节点时,大部
分时间需要一层一层的处理,如果有了xPath,我们定位我们的节点将变得很轻松。他可以根据路径,属性,甚至是条件进行节点的检索。
      XPath 使用路径表达式在XML 文档中进行导航
      XPath 包含一个标准函数库
      XPath 是 XSLT 中的主要元素
      XPath 是一个 W3C 标准

路径表达式语法:
      斜杠(/)作为路径内部的分割符。
      同一个节点有绝对路径和相对路径两种写法:
      路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
      相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step, 也就是不使用"/"起首。
      "."表示当前节点。
      ".."表示当前节点的父节点
      nodename(节点名称):表示选择该节点的所有子节点
      "/":表示选择根节点
      "//":表示选择任意位置的某个节点
      "@": 表示选择某个属性


最后

以上就是欣喜大碗最近收集整理的关于JAVA对XML文件的读写(有具体的代码和解析)的全部内容,更多相关JAVA对XML文件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部