深入浅出Java Dom4j读取XML
在以前自己使用的xml较少,只是了解其很强大,现在可算是在DRP中,真正的开始使用它了,以前只是简单的理解xml,xml即可扩展标记语言,简单的使用,具体是什么?怎么用?还是一直让自己期待的.
首先来看一下xml的强大的作用
一、兼容现有协议
二、统一的管理数据存取格式
三、不同应用系统间数据的共享和交互
四、底层传输的数据更具可读性
五、它和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
<?xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <url>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</url>
<user-name>sys</user-name>
<password>sys</password>
</db-info>
</config>
读取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 password = passwordElt.getStringValue(); System.out.println(driverName);*/ //取得jdbc相关的配置
jdbcConfig.setDriverName(driverNameElt.getStringValue());
jdbcConfig.setUrl(urlElt.getStringValue());
jdbcConfig.setUserName(userNameElt.getStringValue());
jdbcConfig.setPassword(passwordElt.getStringValue()); } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static synchronized XmlConfigReader getInstance(){
if(instance == null){
instance = new XmlConfigReader(); }
return instance; }
/**
* 返回jdbc相关配置
* @return
*/
public JdbcConfig getJdbcConfig(){
return jdbcConfig;
} public static void main(String[] args){ JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
/*System.out.println(jdbcConfig.getDriverName());
System.out.println(jdbcConfig.getUrl());
System.out.println(jdbcConfig.getUserName());*/
System.out.println(jdbcConfig);
}
}
定义的实体集的类:JdbcConfig.java
package conn.lishehe.drp.util;
/**
* Jdbc
* @author lishe
*
*/
public class JdbcConfig { private String driverName;
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 url;
private String userName;
private String password;
@Override
public String toString() {
return this.getClass().getCanonicalName() + "{driverName:" + driverName + ", url:" + url + ", userName:" + userName + "}";
} }
数据处理层:DbUtil.java
package conn.lishehe.drp.util; import java.sql.Connection;
import java.sql.DriverManager; /**
* 封装数据库常用操作
* @author 李社河
*/
public class DbUtil {
/**
* 取得Connection
* @return
* @throws ClassNotFoundException
*/
public static Connection getConnection() throws ClassNotFoundException{
/* Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String username = "";
String password = "";
conn = DriverManager.getConnection(url, username,password); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;*/
Connection conn = null;
try {
JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
Class.forName(jdbcConfig.getDriverName()); conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(),jdbcConfig.getPassword()); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn; }
public static void main(String[] args){
try {
//测试获取到相应的配置文件的信息,打出来
System.out.println(DbUtil.getConnection());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
当然另外值得一提的是DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择:
//Element:用于描述XML文档中的元素。
Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
Element urlElt = (Element)doc.selectObject("/config/db-info/url");
这里使用的是selectObject方法,此方法返回找到的第一个匹配节点,如果没有匹配的节点就返回 null。XPath更像一种选择器,只要你给出条件即可。
总结
通过以上的一些方法,我们可以得到XML整个文档、文档的根节点、符合某个条件的所有节点以及单独拿到某个节点,都是可以的,这样xml带给系统的灵活性是非常强大的,Dom4j使得Java读取XML文件更加的方便,更加的快捷,效率更高,联系到项目中可以把相应的页面信息在数据库的地址,读取成xml文件,在权限的基础上来判定加载相应的结点,生产相应的权限树是不错的选择啊……这样联系想起来又勾起了我做项目的冲动哈!
深入浅出Java Dom4j读取XML的更多相关文章
- Java DOM4J读取XML
DOM4J是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,採用了Java集合框架并全然支持DOM,SAX和JA ...
- java DOM4J 读取XML
最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得上 下面展示一篇我自己写的一个XML读取测试 import java.ut ...
- Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence
1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of ...
- RSS阅读器(一)——dom4j读取xml(opml)文件
接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...
- 使用dom4j 读取XML文件
第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...
- DOM4J读取XML文件
最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...
- java Domj4读取xml文件
先概括,再以代码形式给出. 获取节点: Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点 获取 标签: Element Document.get ...
- 【XML】利用Dom4j读取XML文档以及写入XML文档
Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
随机推荐
- Docker学习笔记【三】安装Redis
项目中使用到Redis,平常都是别人搭建的,今天试着在Google Cloud Platform 上搭建一个学习环境. 1.使用 docker pull redis 从docker hub中下载镜像 ...
- mybatis添加记录时返回主键id
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个 ...
- web项目部署到阿里云服务器步骤
http://www.cnblogs.com/qq3111901846/p/6178855.html http://blog.csdn.net/liona_koukou/article/details ...
- bootstrap的模态框
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Redis集群搭建方案(Linux)
Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset(有序 ...
- python学习之路基础篇(第六篇)
一.算法 冒泡排序 两两比较 打的沉下去,小的浮上来 从而把数字从小到大排列出来 选择排序 随机取一个索引作为最大值,然后和列表中的其他索引进行比较,如果l[0]<l[1],则将l[1]修改为 ...
- 转:rabbitmq——用户管理
原文:http://my.oschina.net/hncscwc/blog/262246?p={{currentPage-1}} 安装最新版本的rabbitmq(3.3.1),并启用managemen ...
- NOIP2017D2T3 列队—Treap
NOIP2017列队 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m ...
- JSON 封装函数
var eventUtil = { addHandler:function(element,type,handler) { //添加句柄 if(element.addEventListener) { ...
- sublime 安装package control
import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d15146761 ...