一、Xml简介
Xml是一种可以用来标记数据、定义数据类型且允许用户对自己的标记语言进行定义的源语言。
Xml的主要功能是存储、数据传输,那么如何通过xml文件进行数据读写,是本文关注的重点。
Xml的读写方式分为两种,一种是面向事件的SAX方式,另一种是面向模型的DOM方式。我们常常用的dom4j读取就是SAX读取方式的体现。
二、Xml读写的两种方式实现原理
1、SAX,即用即解析,按照从左往右从上往下的顺序。
什么时候用到就什么时候解析,而且用过之后不会留存,之后如果还想再用的话就要重新再解析了,类似于懒加载。它是要通过事件触发才能获取解析要求的,所以是面向事件的。
它的好处是内存占用相对较小,适合大型Xml文件使用,但速度相对较慢。
2、DOM,一次性的将Xml文档加入内存,在内存中形成一颗DOM树,然后通过操作树的节点进行读取。
由于一次性加入内存,所以这种方式更适合小型Xml文件使用,相应地,它的读取速度会更快。
三、实例分析
1、SAX方式读取Xml文件信息(基于dom4j)。
首先,先建立一个xml文件,我的这个是用来连接Oracle数据库的。
<?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@192.168.11.111:1521:orcl</url> <user-name>myusername</user-name> <password>mypassword</password> </db-info> </config>之后,我们建立一个jdbcConfig类,用于传递连接数据库的参数。
<pre name="code" class="java">package com.bjpowernode.drp.util; /** * jdbc配置信息 * @author Y * */ public class JdbcConfig { private String driverName; private String url; private String userName; public String getDriverName() { return driverName; } public void setDriverName(String driverName) { this.driverName = driverName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String password; }
下面就是比较重点的xml数据读写工作了:这里我们通过dom4j。
private XmlConfigReader(){ SAXReader reader = new SAXReader();//创建一个DOM4J树,以 SAX方式读取;read可以传文件或InputStream InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try { Document doc = reader.read(in);//读取xml文件,以dom树形式返回 //取得jdbc的相关信息 Element driverNameElt = (Element) doc.selectObject("/config/db-info/driver-name");//找到相关路径下的节点 Element urlElt = (Element) doc.selectObject("/config/db-info/url"); Element userNameElt = (Element) doc.selectObject("/config/db-info/user-name"); Element passwordElt = (Element) doc.selectObject("/config/db-info/password"); System.out.println(driverNameElt.getStringValue());//打印节点内信息。下面还有三个,就不一一写了 …… } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
当然,我们还可以通过添加一个Dbutil工具类来更好的显示和管理jdbcConfig,由于并非本文重点,所以就不写了,大家可以网上查查。
2、DOM方式写入Xml(基于dom4j)。
import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class addAnimal{ public static void main(String args[])throws Exception{ //创建一个文档对象 Document document = DocumentHelper.createDocument(); //构造一棵dom树 Element animal = document.addElement("动物");//根节点,动物标签 Element fish = animal.addElement("鱼类");//一级子节点,鱼类标签 fish.addAttribute("id","shark");//设置鱼类的一个子项id为shark fish.setText("鲨鱼");//文本内容 Element fish1 = animal.addElement("鱼类"); fish1.addAttribute("id","carp");//设置鱼类的一个子项id为carp fish1.setText("鲤鱼"); //设置字符编码方式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GB18030"); //把上述内容写入DOM树 XMLWriter xmlWriter = new XMLWriter(new FileWriter ("student.xml"),format); xmlWriter.write(document); xmlWriter.close(); } }
小结:对于读取xml的方法不只是基于dom4j的,其他的如普通读取和log4j读取都可以。掌握了两用应用方法和应用环境,对Xml实际的读写操作还是比较简单的。好了,对于XML的读写就先介绍到这里。
原文链接:https://www.f2er.com/xml/296053.html