java学习之dom4j 对 xml的读取
来源:互联网 发布:淘宝旗舰店查真假 编辑:程序博客网 时间:2024/05/22 09:01
在BS中已经学习了关于XML的知识,但是一直对于XML的理解是“不重要”,“有没有都可以”。但是在没有xml的日子里,程序员想进行进程间数据传递,必须自己设计传输接口,里面牵涉到很多烦人的数据格式等问题,使得程序员不能专注于具体业务的解决。如今xml和各种语言对xml的支持包,把程序员解脱出来了。
了解了XML再来说说关于dom4j的知识吧。dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包,Hibernate也用它来读写配置文件。
结合DRP中的实例来理解一下吧。
XML文件:
<span style="font-family:FangSong_GB2312;font-size:18px;"><?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></span>读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。
代码中reader的read方法是重载的,可以通过InputStream, File, Url等不同的参数来读取,通过单例模式生成一个对象,这个对象实例化一个SAXReader,然后将xml文件加载到流当中。再通过SAXReader的read()方法将其转换成一个document对象。然后通过这个document对象取到xml文件的节点的值。
读取XML的java类:
<span style="font-family:FangSong_GB2312;font-size:18px;">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");//取得jdbc相关的配置jdbcConfig.setDriverName(driverNameElt.getStringValue());jdbcConfig.setUrl(urlElt.getStringValue());jdbcConfig.setUserName(userNameElt.getStringValue());jdbcConfig.setPassword(passwordElt.getStringValue());} catch (DocumentException e) {// TODO Auto-generated catch blocke.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);}}</span>
定义实体类:JdbcConfig.java
<span style="font-family:FangSong_GB2312;font-size:18px;">package conn.lishehe.drp.util;/** * Jdbc * @author 徐志鹏 * */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;@Overridepublic String toString() {return this.getClass().getCanonicalName() + "{driverName:" + driverName + ", url:" + url + ", userName:" + userName + "}";}}</span>
数据处理层:DbUtil.java
<span style="font-family:FangSong_GB2312;font-size:18px;">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 {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 blocke.printStackTrace();}return conn;}public static void main(String[] args){try {//测试获取到相应的配置文件的信息,打出来System.out.println(DbUtil.getConnection());} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}</span>关于上面这些代码我还是要进行记忆和总结,其实并不难,做的多了也就慢慢懂了。大家一起加油吧!!!
1 0
- java学习之dom4j 对 xml的读取
- dom4j对xml的读取
- 学习笔记-Java中的xml文件读取之DOM4J解析
- 【学习笔记】JAVA之使用dom4j对xml文件解析
- java读取xml Dom4j
- Java DOM4J读取XML
- 用dom4j+xpath的方式对xml文件进行读取
- Dom4J对XML文件的读取和写入
- JAVA 用dom4j读取xml
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML .
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML
- 深入浅出Java Dom4j读取XML
- DOM4J 学习总结之 读取XML文件指定元素内容
- Android本地广播机制
- Java中10种覆盖方法的方式
- git clone 插件 + Git远程操作详解
- ping 192.168.1.1-t命令有什么用?
- ping命令的处理过程
- java学习之dom4j 对 xml的读取
- Memcached分析特点
- [转载]关于LWIP协议栈连续多次tcp_write后失败的解决过程
- iOS 之发送邮件的常用方法
- CSS2中display:table属性的用法详解
- (1) Appache Flume 中文介绍
- 获取内存信息
- AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto
- 持之以恒,善始善终