深入浅出Java Dom4j读取XML(一)

2014-11-23 23:19:28 · 作者: · 浏览: 3

在以前自己使用的xml较少,只是了解其很强大,现在可算是在DRP中,真正的开始使用它了,以前只是简单的理解xml,xml即可扩展标记语言,简单的使用,具体是什么?怎么用?还是一直让自己期待的.


首先来看一下xml的强大的作用


一、兼容现有协议


XML文档格式的管理信息可以很容易地通过HTTP 协议传输,由于HTTP是建立在TCP之上的,故管理数据能够可靠传输。XML还支持访问XML文档的标准API,如DOM,SAX,XSLT,Xpath等。

二、统一的管理数据存取格式

XML能够以灵活有效的方式定义管理信息的结构。以XML格式存储的数据不仅有良好的内在结构,而且由于它是W3C提出的国际标准,因而受到广大软件提供商的支持,易于进行数据交流和开发。现有网络管理标准如TMN、SNMP等的管理信息库规范决定了网管数据符合层次结构和面向对象原则,这使得以XML格式存储网管数据也非常自然,易于实现。


三、不同应用系统间数据的共享和交互


只要定义一套描述各项管理数据和管理功能的XML语言,用Schema对这套语言进行规定,并且共享这些数据的系统的XML文档遵从这些Schema,那么管理数据和管理功能就可以在多个应用系统之间共享和交互。

四、底层传输的数据更具可读性

网络中传输的底层数据因协议不同而编码规则不同,虽然最终传输时都是二进制位流,但是不同的应用协议需要提供不同的转换机制。这种情况导致管理站在对采用不同协议发送管理信息的被管对象之间进行管理时很难实现兼容。如果协议在数据表示时都采用XML格式进行描述,这样网络之间传递的都是简单的字符流,可以通过相同的XML解析器进行解析,然后根据不同的XML标记,对数据的不同部分进行区分处理,使底层数据更具可读性。 [4]



五、它和json都是一种数据交换格式

在不同的 数据库与系统间的交互,数据的相互共享其解决了很大的问题,不同语言开发的系统也可以使用xml来共享数据;

xml可以当然数据库的表,来存储数据,因为其都有一定的结构,结点,分层次的,很有规律,这样我们以前来回传递数据可以借鉴xml来实现……


既然xml的作用这么重要,如何解析xml、数据库的数据取出来生成xml,这是首要解决的问题,结合在DRP中,为了实现数据库的地址、用户名、密码都是灵活的通过xml来获取,显然系统后期的维护与修改显得很轻松。

Dom4j是什么?

Dom4j是一个易于使用的,开源的库,在Java平台上与XML,XPath,XSLT协同工作。使用Java集合框架,全面支持DOM,SAX,JAXP。

dom4j是一个Java的XMLAPI,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的JavaXMLAPI,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。


Dom4j实例解析XML


要读取解析的xml文件:sys-config.xml



  

  
		
    
    
     oracle.jdbc.driver.
     OracleDriver
     
    
     jdbc:oracle:thin:@127.0.0.1:1521:ORCL
     
    
     sys
     
    
     sys
     
   

  


读取xml文件的类:XmlConfigReader.java


读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。
import java.io.InputStream;

//引用相应的包

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


读取xml的java类:XmlConfigReader


代码中reader的read方法是重载的,可以通过InputStream, File, Url等不同的参数来读取,通过单例模式生成一个对象,这个对象实例化一个SAXReader,然后将xml文件加载到流当中。再通过SAXReader的read()方法将其转换成一个document对象。然后通过这个document对象取到xml文件的节点的值。


package conn.lishehe.drp.util;

import java.io.InputStream;

//引用相应的包

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XmlConfigReader {
	//懒汉式 
	private static XmlConfigReader instance = null;
	//保存jdbc相关配置信息的
	private JdbcConfig jdbcConfig = new JdbcConfig();
	
	private XmlConfigReader(){
		//建立一个SAXReader对象 
		SAXReader reader = new SAXReader();
		//通过当前线程的类加载器,获得文件的相对路径,读入缓冲输入流 
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
		try {
			//取得jdbc相关配置信息
			//通过流来读取xml文件  
			Document doc =  reader.read(in);
			//读取jdbc相关信息
			//Element:用于描述XML文档中的元素。
			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");
			
			
			/*String driverName = driverNameElt.getStringValue();
			String url = urlElt.getStringValue();
			String userName = userNameElt.getStringValue();
			@SuppressWarnings("unused")
			String