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
原创粉丝点击