写前思考
XML全称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但是HTML中的元素是固定的,而XML的标签是可以由用户自定义的。
个人认为XML文件的存在如可以用来存储一些配置信息,我们在写完一个java程序后,程序里面会有很多配置信息,如JDBC里面的各种服务器端口、USERNAME、PASSword等等,通过XML我们只需要简单的修改XML文件就可以实现这些配置的更改,从而不用再去修改java文件。有一篇博客写了一些对XML文件在java项目中的作用理解,笔者认为写的很具体,但是鉴于知识面还没有太深,不太了解spring等框架,因此心得体会还没有很深,但是仍然可以作为参考。博客地址如下
https://www.cnblogs.com/yefengCrazy/p/5636661.html
XML的语法不作详细介绍,网上资料很多,主要了解XML有两种约束方法,约束是用来规范XML文档的,以便于我们更好的解析XML文件,主流是两种约束方法,一种为DTD,另外一种为Schema。值得注意的是在编写这两种规范时都应在开头添加约束方法的引入。
XML解析概述:
当我们将数据存储在XML后,我们就希望通过程序获得XML的内容,如果我们使用java基础所学的IO流只是是可以完成的,不过你需要非常繁琐的操作才可以完成,所以我们需要使用解析器来完成这一项操作。
开发中常用的解析方式有三种
1.DOM:要求解析器把整个XML文档装在到内存,并解析成一个Document对象。
2.SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行都将出发对应的事件。
3.PULL:Android内置的XML解析方式。
常见的解析开发包:JAXP、JDom、jsoup、dom4j
使用dom4j
dom4j必须使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的根元素。
常用API如下:
反射
JAVA反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用它的仍以一个方法和属性。反射的作用主要是为了后期程序的可扩展,使用反射可以在运行时对类class、构造方法Constructor、普通方法Method、字段Field进行操作。反射的详细操作笔者整理如下,作基本了解掌握。
解析XML并执行反射的一个示例:
public void demo() {
//1.加载配置文件,并获得dcument对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File('XML文件地址'));
//2.获得根元素
Element rootElement = document.getRoolElement();
//3.获得第一个<servlet>子元素
Element servletElement = rootElement.element(‘servlet’);
//4.获得字符串实现类<servlet-class>的值
String servletClass = servletElement.elementText('servlet-class');
//5.获得字符串实现类实例
Class clazz = Class.forName(servletClass);
MyServlet myServlet = (MyServlet)clazz.newInstance();
//6.执行对象的方法
myServlet.method();//或 clazz.getMethod(‘method’).invoke(myServlet);
}