什么是xml?
xml是可扩展的标记性语言
xml的作用
xml的主要作用有:
1.用来保存数据,而且这些数据具有自我描述性
2.它还可以作为项目或者模块的配置文件
3.还可以作为网络传输数据的格式
1.文档声明
xxxxxxxxxx
11
2.元素(标签)
元素是指开始标签到结束标签的内容
xxxxxxxxxx
251<!--根标签-->
2<students>
3
4 <!--子标签-->
5 <student id="1001">
6 <name>张三</name>
7 <age>25</age>
8 <address>镇江市</address>
9 </student>
10
11 <!--子标签-->
12 <student id="1002">
13 <name>李四</name>
14 <age>29</age>
15 <address>南京市</address>
16 </student>
17
18 <!--子标签-->
19 <student id="1003">
20 <name>王五</name>
21 <age>19</age>
22 <address>上海市</address>
23 </student>
24
25</students>
3.xml属性
id属性为1003
xxxxxxxxxx
11<student id="1003">
4.xml注释
ctrl + shift + /
xxxxxxxxxx
11<!--此处写注释-->
xml可扩展的标记语言,不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析
document对象表示的是整个文档(可以是html文档,也可以是xml文档)
w3c是一个制定规范的组织,针对于xml,html都制定了相关的规范,元素都是以标签的形式体现的,每个标签都是一个对象,而且每个标签都是有层级关系的,w3c通过一种树形图来管理这种关系,而且提供了一个文本对象dom对象,通过这个dom对象可以去获取所有的标签对象
dom解析技术
dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现,Java对dom技术解析标记也做了实现
sun公司在JDK5版本对dom解析技术进行升级:SAX(Simple API for XML) SAX解析,它跟W3C制定的解析不太一样,它是以类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所以它在解析xml的时候,在内存的使用上,和性能上,都优于Dom解析。
1.先加载xml文件创建Document对象
2.通过Document对象拿到根元素对象 getRootElement()
3.通过根元素.elements(标签名)
;可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
4.找到你想要修改、删除的子元素,进行相应的操作
5.保存到硬盘上
将xml文件内容解析封装为java对象
xxxxxxxxxx
631package com.os467.xml;
2
3import com.os467.beans.Student;
4import org.dom4j.Document;
5import org.dom4j.DocumentException;
6import org.dom4j.Element;
7import org.dom4j.io.SAXReader;
8
9import java.util.ArrayList;
10import java.util.List;
11
12public class Dom4jTest {
13
14 public static void main(String[] args) {
15
16 try {
17 //创建流对象
18 SAXReader saxReader = new SAXReader();
19
20 //通过流对象读取xml文件,然后返回document对象
21 Document document = saxReader.read("src/xml/test.xml");
22
23 //通过document获取到根节点
24 Element rootElement = document.getRootElement();
25
26 //获取根标签中所有的子标签对象
27 List<Element> elements = rootElement.elements("student");
28
29 //创建集合对象
30 List<Student> studentList = new ArrayList<>();
31
32 //遍历集合
33 for (Element element : elements) {
34
35 //获取子标签中的数据
36 String name = element.elementText("name");
37 String age = element.elementText("age");
38 String address = element.elementText("address");
39
40
41 //将这些数据封装成java对象
42 Student student = new Student(name, Integer.parseInt(age), address);
43
44 //将这些对象添加到集合中
45 studentList.add(student);
46
47
48 }
49
50 for (Student student : studentList) {
51
52 System.out.println(student);
53
54 }
55
56 } catch (DocumentException e) {
57 e.printStackTrace();
58 }
59
60
61 }
62
63}
核心配置类
xxxxxxxxxx
771package com.os467.spring.Work;
2
3import org.dom4j.Attribute;
4import org.dom4j.Document;
5import org.dom4j.DocumentException;
6import org.dom4j.Element;
7import org.dom4j.io.SAXReader;
8import org.springframework.lang.Nullable;
9
10import java.util.Collection;
11import java.util.HashMap;
12import java.util.List;
13import java.util.Map;
14
15public class ClassPathXmlApplicationContext {
16
17 //核心容器
18 private static Map<String,Object> beanMap;
19
20 static {
21
22 beanMap = new HashMap<>();
23
24 }
25
26 public ClassPathXmlApplicationContext(String xmlPath) {
27
28 //创建流对象
29 SAXReader saxReader = new SAXReader();
30
31 try {
32 //读取document对象
33 Document document = saxReader.read(xmlPath);
34
35 //获取根标签
36 Element rootElement = document.getRootElement();
37
38 //获取子标签
39 List<Element> beans = rootElement.elements("bean");
40
41 //遍历每个标签
42 for (Element bean : beans) {
43
44 //获取到key和value
45 String key = bean.attribute("id").getValue();
46
47 String valuePath = bean.attribute("class").getValue();
48
49 Object value = Class.forName(valuePath).newInstance();
50
51 beanMap.put(key,value);
52
53 }
54
55
56 } catch (DocumentException e) {
57 e.printStackTrace();
58 } catch (ClassNotFoundException e) {
59 e.printStackTrace();
60 } catch (IllegalAccessException e) {
61 e.printStackTrace();
62 } catch (InstantiationException e) {
63 e.printStackTrace();
64 }
65
66 }
67
68 public <T> T getBean(String beanId, Class<T> requiredType){
69
70 Object o = beanMap.get(beanId);
71
72 T t = requiredType.cast(o);
73
74 return t;
75 }
76
77}
xml文件
xxxxxxxxxx
51
2<beans>
3 <bean id="user" class="com.os467.beans.User"></bean>
4 <bean id="student" class="com.os467.beans.Student"></bean>
5</beans>
测试
xxxxxxxxxx
231package com.os467.spring.test;
2
3import com.os467.beans.Student;
4import com.os467.beans.User;
5import com.os467.spring.Work.ClassPathXmlApplicationContext;
6
7public class Dom4jTest {
8
9 public static void main(String[] args) {
10
11 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("src/xml/TestXml.xml");
12
13 User user = context.getBean("user", User.class);
14 Student student = context.getBean("student", Student.class);
15
16
17 System.out.println(user);
18 System.out.println(student);
19
20
21 }
22
23}