文档章节

尝试使用Jdom

secondriver
 secondriver
发布于 2015/09/17 09:26
字数 936
阅读 12
收藏 1

   毫无疑问java中的DOM操作还是比较难使用,他是一个庞大的API,很难驾驭。并且在是使用的时候需要消耗更多的内存和要依赖与更高的主频。

使用的类包有:

   编写一个简单的XML文件如下:

 


  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <sys> 
  3.     <jdbc> 
  4.         <jdbc-driver>com.mircosoft.sql.sqlServer.SQLServerDriver</jdbc-driver> 
  5.         <jdbc-url>jdbc:sqlserver://localhost:1433;dataName="ext"</jdbc-url>  
  6.         <jdbc-user>sa</jdbc-user> 
  7.         <jdbc-password>sa</jdbc-password> 
  8.     </jdbc> 
  9.     <person nation="zh_CN"> 
  10.         <person-object id="1"> 
  11.             <person-name>Zhubajie</person-name> 
  12.             <person-age>23</person-age> 
  13.             <person-address>Xi'an</person-address> 
  14.         </person-object> 
  15.         <person-object id="2"> 
  16.             <person-name>Shasidi</person-name> 
  17.             <person-age>24</person-age> 
  18.             <person-address>Xi'an</person-address> 
  19.         </person-object> 
  20.     </person> 
  21. </sys> 

1.如果将jdbc结点中的子节点的元素封装为一个数据对象,那么java操作数据库的数据库连接就可以通过配置相应的XML文件就可实现,这样就可一不用动java源代码。

2.如果将person当作一个集合的话,那么这个集合就有两个对象。

3.如果将person当作一个父类的话,那么有两个子类继承了person,子类的描述如:

<person-object id="XX">构成

4.如果单独去看待<person-object id="XX">的话,相当于一个实体类的一个实例对象,对象的人为标识用id来表示,对象有name,age,address属性。

    通过反射机制就可以通过读取XML文件的配置信息来实例化类对象,类似与Spring中的依赖注入中当然注入对象。

下面是一个读取的实例:

采用单例模式,因为对于配置文件的读取一般都是当应用程序加载或者运行某一时刻是才使用。



  
  1. package xiao.zhang.jdom; 
  2.  
  3. import java.io.FileInputStream; 
  4. import java.io.FileNotFoundException; 
  5. import java.io.IOException; 
  6. import java.util.ArrayList; 
  7. import java.util.Iterator; 
  8. import java.util.List; 
  9.  
  10. import org.jdom.DataConversionException; 
  11. import org.jdom.Document; 
  12. import org.jdom.Element; 
  13. import org.jdom.JDOMException; 
  14. import org.jdom.input.SAXBuilder; 
  15.  
  16.  
  17. public class ReadXml { 
  18.  
  19.     /** 
  20.      * 配置文件路径 
  21.      */ 
  22.     private static String FILE_PATH = "C://jdbc-config.xml"
  23.  
  24.     /** 
  25.      * 采用单例模式,创建一个读取ReadXml实例 
  26.      *  
  27.      */ 
  28.  
  29.     private static ReadXml readXmlInstance = new ReadXml(); 
  30.  
  31.     /** 
  32.      * 文档的根元素 
  33.      */ 
  34.     private Element rootElt = null
  35.  
  36.     /** 
  37.      * 文档对象 
  38.      *  
  39.      */ 
  40.  
  41.     private Document doc = null
  42.  
  43.     /** 
  44.      * 私有的方法 
  45.      */ 
  46.     private ReadXml() { 
  47.         SAXBuilder sb = new SAXBuilder(); 
  48.         try { 
  49.             // 获取到文档对象 
  50.             this.doc = sb.build(new FileInputStream(FILE_PATH)); 
  51.             // 获取到XML文档的根 
  52.             this.rootElt = doc.getRootElement(); 
  53.         } catch (FileNotFoundException e) { 
  54.             e.printStackTrace(); 
  55.         } catch (JDOMException e) { 
  56.             e.printStackTrace(); 
  57.         } catch (IOException e) { 
  58.             e.printStackTrace(); 
  59.         } 
  60.     } 
  61.  
  62.     /** 
  63.      * 获得读取XML文件的实例 
  64.      *  
  65.      * @return 
  66.      */ 
  67.     public static ReadXml getInstance() { 
  68.         return readXmlInstance; 
  69.     } 
  70.  
  71.     /** 
  72.      *  
  73.      * 读取链接数据库的配置文件 
  74.      *  
  75.      * @return 
  76.      */ 
  77.     public JDBC getJDBC() { 
  78.         JDBC jdbc = new JDBC(); 
  79.         Element jdbcElt = this.rootElt.getChild("jdbc"); 
  80.         List<?> jdcbChildList = jdbcElt.getChildren(); 
  81.         List<String> jdbcTextTrim = new ArrayList<String>(); 
  82.         for (Iterator<?> iter = jdcbChildList.iterator(); iter.hasNext();) { 
  83.             Element elt = (Element) iter.next(); 
  84.             jdbcTextTrim.add(elt.getTextTrim()); 
  85.         } 
  86.         jdbc.setDriver(jdbcTextTrim.get(0)); 
  87.         jdbc.setUrl(jdbcTextTrim.get(1)); 
  88.         jdbc.setUser(jdbcTextTrim.get(2)); 
  89.         jdbc.setPassword(jdbcTextTrim.get(3)); 
  90.  
  91.         return jdbc; 
  92.     } 
  93.  
  94.     /** 
  95.      *  
  96.      * 根据数据库配置文件来获得数据库连接的相关信息 
  97.      *  
  98.      * @return 
  99.      */ 
  100.     public JDBC getJdbcFromConf() { 
  101.         JDBC jdbc = new JDBC(); 
  102.         Element jdbcElt = this.rootElt.getChild("jdbc"); 
  103.         jdbc.setDriver(jdbcElt.getChildText("jdbc-driver")); 
  104.         jdbc.setPassword(jdbcElt.getChildText("jdbc-password")); 
  105.         jdbc.setUrl(jdbcElt.getChildText("jdbc-url")); 
  106.         jdbc.setUser(jdbcElt.getChildText("jdbc-user")); 
  107.         return jdbc; 
  108.     } 
  109.  
  110.     public List<Person> getPersonList() { 
  111.         List<Person> personList = new ArrayList<Person>(); 
  112.         Element personElt = this.rootElt.getChild("person"); 
  113.         // 获得Person的属性nation的值 
  114.         String nation = personElt.getAttribute("nation").getValue(); 
  115.         // 获得Person节点下的所有节点元素 
  116.         List<?> personEltList = new ArrayList<Object>(); 
  117.         personEltList = personElt.getChildren(); 
  118.         Person p = null
  119.         for (Iterator<?> iter = personEltList.iterator(); iter.hasNext();) { 
  120.             p = new Person(); 
  121.             Element elt = (Element) iter.next(); 
  122.             try { 
  123.                 p.setId(elt.getAttribute("id").getIntValue()); 
  124.                 p.setName(elt.getChildTextTrim("person-name")); 
  125.                 p.setNation(nation); 
  126.                 p.setAge(Integer.parseInt(elt.getChildTextTrim("person-age"))); 
  127.                 p.setAddress(elt.getChildTextTrim("person-address")); 
  128.                 personList.add(p); 
  129.             } catch (DataConversionException e) { 
  130.                 e.printStackTrace(); 
  131.             } 
  132.         } 
  133.         return personList; 
  134.  
  135.     } 
  136.     /** 
  137.      * @return the fILE_PATH 
  138.      */ 
  139.     public static String getFILE_PATH() { 
  140.         return FILE_PATH; 
  141.     } 
  142.  
  143.     /** 
  144.      * @return the rootElt 
  145.      */ 
  146.     public Element getRootElt() { 
  147.         return this.rootElt; 
  148.     } 
  149.  
  150.     /** 
  151.      * @return the doc 
  152.      */ 
  153.     public Document getDoc() { 
  154.         return this.doc; 
  155.     } 
  156.  
  157.     /** 
  158.      * @param fILE_PATH 
  159.      *            the fILE_PATH to set 
  160.      */ 
  161.     public static void setFILE_PATH(String fILE_PATH) { 
  162.         FILE_PATH = fILE_PATH; 
  163.     } 
  164.  
  165.     /** 
  166.      * @param rootElt 
  167.      *            the rootElt to set 
  168.      */ 
  169.     public void setRootElt(Element rootElt) { 
  170.         this.rootElt = rootElt; 
  171.     } 
  172.  
  173.     /** 
  174.      * @param doc 
  175.      *            the doc to set 
  176.      */ 
  177.     public void setDoc(Document doc) { 
  178.         this.doc = doc; 
  179.     } 

测试的方法:



  
  1. public static void main(String[] args) { 
  2.         ReadXml rx = ReadXml.getInstance(); 
  3.         JDBC jdbc = null
  4.         jdbc = rx.getJdbcFromConf(); 
  5.         System.out.println("getJdbcFromConf:" + jdbc.toString()); 
  6.         jdbc = rx.getJDBC(); 
  7.         System.out.println("getJDBC:" + jdbc.toString()); 
  8.         List personList = rx.getPersonList(); 
  9.         for (Iterator iter = personList.iterator(); iter.hasNext();) { 
  10.             System.out.println(((Person) iter.next()).toString()); 
  11.         } 
  12.     } 


测试读取数据库连接的信息结果:



  
  1. getJdbcFromConf:JDBC [driver=com.mircosoft.sql.sqlServer.SQLServerDriver, url=jdbc:sqlserver://localhost:1433;dataName="ext", user=sa, password=sa] 
  2. getJDBC:JDBC [driver=com.mircosoft.sql.sqlServer.SQLServerDriver, url=jdbc:sqlserver://localhost:1433;dataName="ext", user=sa, password=sa] 

测试读取person结点的信息:



  
  1. Person [nation=zh_CN, id=1, name=Zhubajie, age=23, address=Xi'an] 
  2. Person [nation=zh_CN, id=2, name=Shasidi, age=24, address=Xi'an] 

 

本文出自 “野马红尘” 博客,谢绝转载!

© 著作权归作者所有

共有 人打赏支持
secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM、SAX、JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SA...

Henrykin
2016/11/03
48
0
java解析xml的四种方法汇总

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM、SAX、JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SA...

LYQ1990
2017/10/26
0
0
XML解析(DOM、SAX、JDOM和DOM4J)

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM、SAX、JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SA...

拷贝忍者卡卡习
2017/01/18
0
0
java 解析xml文件

1 jdom2 3 jdom解析合并两个文件时。出现 解决方案那么如何使用JDOM合并XML文档呢?知道之后其实很简单,Content类有个detach() 方法(Example code: someElement.addContent(someRootElemen...

小墨雨
2016/12/15
7
0
使用JDOM解析XML

一、前言 JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。 DOM适合于当今流行的各种语言...

关河
2016/02/04
19
0

没有更多内容

加载失败,请刷新页面

加载更多

毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
21分钟前
0
0
Mybatis动态语句,if test字符串不用进行null判断

描述:根据creator列进行过滤获取image表的数据。 代码如下: @Select("<script>" + " select * from image " + " <where>" + " <if test='isAllCreator != 1'> ......

Coder顾
40分钟前
0
0
写了2年python,知道 if __name__ == '__main__' 什么意思吗?

相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于...

上海小胖
48分钟前
4
0
zkong笔记18

这两天的主要工作: Elasticsearch初探 接受ESL的超管功能 ERP开源系统调研

莫在全
51分钟前
1
0
tpcc-mysql的安装和使用

# tpcc-mysql的安装和使用 前言 公司要做Mysql方面性能调优,大概浏览一下Mysql一些参数设置后,想开始尝试进行调整测试。但发现一个问题,测试缺乏标准。所以需要一些基准测试标准或者工具。...

紫暘
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部