读写Xml文件

一、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的读写就先介绍到这里。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念