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

       
            

      

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值