一、什么是XML:
Xml
的全称为
Extensiable Markup Language,
意思是可扩展的标记语言。
XMl
的语法上和
HTML
比较相似,但是
html
标签都是规定好了的,而
XML
是可以随意定义标签的。
二、XML常见用法
用法一:存放配置文件
用法二:存储数据
很多应用程序会使用xml个来存放数据,比如我们用过的powerdesiner。
用法三:传输数据
我们知道使用不同语言开发程序之间是不能够直接交流的,我们需要介入一种约定的协议来完成不同系统之间的交互。一直比较主流的就是通过发布webservice的方式来暴露自己的本系统的功能。外部程序可以使用别的程序暴露的webservice来访问。那么webservice使用的是soap协议,相互之间传递的数据就是XML格式的文档数据。
三、XML语法:
①头部声明
XML
文档
(
必须的
)
<?xml version="1.0" encoding="UTF-8" language=”java”?>
文档必须以
<?xml ... ?>
开始
,
并且必须放到文档的开头。不允许出现任何其他的干扰字符。文档声明部分只有三个属性:
version
,
encoding
,
language,
注意其中
version
是必须的。
四、Dom4J解析XMl文档
XML的文档结构理解
XML
可以从根节点开始,一层一层的抓出一颗树形的节点结构。我们称之为
DOM
树。
简介
当数据被存在
xml
文件后,如果我们想要用到里面的数据需要通过程序获取文件内容,解析出我们想要的数据,如果使用我们目前所学习的知识,我们只能使用
IO
流来完成读取文件,然后通过一些复杂的判断来获取文档里面的数据。这样的常用的文档格式,一定会有一些懒人来封装一些方便的工具。那么针对
XML
文档我们有
DOM4J,sax
这个工具包来帮助我们从复杂的
XML
文档解析中解脱出来。
Dom
解析器方式
我们介绍两种
dom
解析器
,dom4j
解析器和
SAX
解析器。
Dom4j
会把所有文档一次性的读取到内存里,形成一个完整的
DOCUMENT
对象。
优点:元素之间有结构关系,可以进行节点的增删改查。
缺点:文档过大时候内存容易溢出。
SAX:
一边读一边解析,逐行扫描文档,读一行解析一行,并以事件驱动的方式进行解析,这种方式速度快,但是只能对文档进行读取,不能修改节点信息。
常用API
//定义一个SAXReader 用于将文档读取到内存中
SAXReader saxReader = new SAXReader();
//读取XMl文档组装成文档Document
Document doc = saxReader.read(is);
//获取根节点
Element rootElement = doc.getRootElement();
//获取根节点
Element rootElement = doc.getRootElement();
//获取节点的标签名(tagname)
String typeName = rootElement.getName();
//获取当前节点的所有子节点
List<Element> list = rootElement.elements();
//根据标签名获取一个子节点
Element defaultConfigEle = rootElement.element("default-config");
//读取属性
String propertyName = ele.attributeValue("name");
//读取节点文本内容
String propertyValue = ele.getText();
//另一种方式读取节点内容
String targetEleText = defaultConfigEle.elementText("tebiede");
Xml
除了存储数据配置文件以外还经常被我们用来存
javabean
和数据字段之间的关系,当查询数据库时候我们可以根据
xml
文档来将查询到的结果节方便的翻译成
java
对象。
将我们的
select
查询来用
xml
文档来简化字段对应。
五、JAVA反射
先观察我们的的select语句将,将结果集转换成对象的过程是多么的的麻烦,并且机械化,无脑。虽然我们用xml来对应了bean属性和数据库字段间的关系。但是还是不够灵活。那么使用反射就能解决这个问题。
①什么是反射:
1.Java的反射机制是在运行状态中,对任意一个类都能够知道这个类的所有属性和方法。对于任意一个对象我们都能调用他的任意一个方法。
2. 使用反射我们可以再运行时对类Class,构造方法Constructor,普通方法Method,字段feild进行操作。
②Class对象
Class对象是对Class字节码文件进行描述的对象。
获取类型对象的方法是Class.forName(“全路径”);
String.class类名点class获取类对象。obj.getClass(),通过实例化对象获取类型对象。
②构造方法对象Contructor
获公共取构造方法
Constructor ct = class.getConstructor(String.class);
创建实例对象
class.newInstance();
③Method对象
Mehtod对象是对类中的普通方法的描述。
根据方法名和方法参数描述来获取方法
class.getMethod("gogogo",String.class,Integer.class);(获取公共方法包括父类)
class.getDeclaredMethod("gogogo",String.class,Integer.class);(获取所有本类中声明的)
class.getMethods();获取所有公共方法包含父类
class.getDeclaredMethods();获取本类中声明的方法
执行方法 method.invoke(实例对象,参数列表);
④Feild对象
Field对象是对java类中定义的字段属性进行描述。
Field f = class.getField("属性名");获取公共属性包括父类
Field[] fs = class.getFields();获取公共属性包括父类
Field f1 = class.getDeclaredField("属性名");获取本类中声明的属性
Field[] fs1 = class.getDeclaredFields();获取本类中声明的属性