开发者社区> 技术小胖子> 正文

使用JDOM解析XML文档

简介:
+关注继续查看
    说到XML,恐怕我们最深刻的印象也就是满眼的配置文件了,其实使用XML来交换数据也是比较常见的,我想就是因为它的灵活性好通用性强便于传输等原因吧。这样,对XML文件的解析就显得特别重要了,就好像我们的JDBC从数据库拿数据一样。解析xml文件的技术有很多,我通常都是使用JDOM。
     我要讲的这个例子是基于这样简易Bean工厂类思想,把类及其实现的接口配置到XML中,工厂(其实就是一个Map)基于这个配置文件来存储类的实例,对于Map中的每个元素都是类的一个实例,其中接口作键,利用反射生成相应的对象作值,使用者可以把此Map作为一个容器来取得目标类的实例。
1.XML文件:configure.xml
<?xml version="1.0" encoding="UTF-8"?> 
<sys-configure> 
  <jdbc-info> 
    <driver-class-name> 
      oracle.jdbc.driver.OracleDriver 
    </driver-class-name> 
    <url>jdbc:oracle:thin:@127.0.0.1:1521:test</url> 
    <user-name>scott</user-name> 
    <password>yf123</password> 
  </jdbc-info> 
  <beans> 
    <bean id="com.yangfei.jdom.read.TestDao" 
      class="com.yangfei.jdom.read.TestDaoImpl"> 
    </bean> 
    <bean id="com.yangfei.jdom.read.TestService" 
      class="com.yangfei.jdom.read.TestServiceImpl"> 
    </bean> 
    <!-- 可以把所有的需要创建的类配置进来 --> 
  </beans> 
</sys-configure>
 
2.事例接口及其实现类:
package com.yangfei.jdom.read; 

public interface TestDao { 
  public void test(); 


public class TestDaoImpl implements TestDao { 
  public void test() { 
    System.out.println("print from TestDaoImpl"); 
  } 


public interface TestService { 
  public void t(); 


public class TestServiceImpl implements TestService { 
  public void t() { 
    System.out.println("print from TestService"); 

  } 
}
 
3.解析类:Test.java
public class Test { 
  @SuppressWarnings("unchecked"
  public static void main(String[] args) { 
    Map beanMap = new HashMap();// 用来存放从xml文件中取出的id和classname对用的对象 
    SAXBuilder sb = new SAXBuilder(); 
    Document doc = null
    try { 
      doc = sb.build(Thread.currentThread() 
          .getContextClassLoader() 
          .getResourceAsStream("configure.xml"));// 以相对目录来读取文件 
      Element rootElt = doc.getRootElement(); 
      List<Element> Elts = XPath.selectNodes(rootElt,"//sys-configure/beans/bean"); 
      for (Element elt : Elts) { 
        String id = elt.getAttributeValue("id"); 
        String className = elt.getAttributeValue("class"); 
        System.out.println(id + "@@@" + className); 
        // 取出之后生成实现类的具体对象,以接口为键,以实现类对象为值存放在Map里 
        Object obj = Class.forName(className).newInstance(); 
        beanMap.put(id, obj);// 以后使用类对象时就可以访问Map来取得对象了. 
      } 
    } catch (JDOMException e) { 
      e.printStackTrace(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
}


     本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/299661,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Jdom生成xml文件时的特殊字符问题
Jdom生成xml文件时的特殊字符问题
27 0
解决Jdom生成xml文件时的特殊字符问题
Jdom生成xml文件时的特殊字符问题
35 0
记一次思路:如何取消JDOM生成xml时的自动转义
记一次思路:如何取消JDOM生成xml时的自动转义
64 0
记一次思路:如何取消JDOM生成xml时的自动转义
一般思路: val link2 = Element("link2") link2.text=">>>>>>>>>
1048 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
相关实验场景
更多