熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

java 使用JDOM解析xml文件

2013-11-15 12:06:35  來源: JSP教程 
java中如何使用JDOM解析xml文件呢?以下小編就用實例為大家詳細的介紹一下需要的朋友可以參考下  

  JDOM是一個開源項目它基於樹型結構利用純JAVA的技術對XML文檔實現解析生成序列化以及多種操作JDOM直接為JAVA編程服務它利用更為強有力的JAVA語言的諸多特性(方法重載集合概念以及映射)把SAX和DOM的功能有效地結合起來
JDOM的官方地址
首先新建一個接口和個類為後續做准備
[Moveablejava]

復制代碼 代碼如下:
package comnjuptzhbtest;
public interface Moveable {
 void run();
}

  
[Planejava]

復制代碼 代碼如下:
package comnjuptzhbtest;
public class Plane implements Moveable {
 @Override
 public void run() {
  // TODO Autogenerated method stub
  Systemoutprintln("飛機在翱翔");
 }
}

  
[Trainjava]

復制代碼 代碼如下:
package comnjuptzhbtest;
public class Train implements Moveable{
 @Override
 public void run() {
  Systemoutprintln("火車在飛奔");
 }

}

  
新建一個接口主程序可以調用getBean方法獲得相應的對象

復制代碼 代碼如下:
package comnjuptzhbtest;
public interface BeanFactory {
 Object getBean(String id);
}

  
需要解析的xml文件如下

復制代碼 代碼如下:
<?xml version="" encoding="UTF"?>
<beans>
 <bean
     id="train"
     class="comnjuptzhbtestTrain">
 </bean>
 <bean
     id="plane"
     class="comnjuptzhbtestPlane">
 </bean>
</beans>

  
解析文件的主類實現了BeanFactory接口

復制代碼 代碼如下:
package comnjuptzhbtest;
import javautilHashMap;
import javautilList;
import javautilMap;
import orgjdomDocument;
import orgjdomElement;
import orgjdominputSAXBuilder;
import orgjdomxpathXPath;
public class ClassPathXmlApplicationContext implements BeanFactory {
 private Map<String Object> mapContainer = new HashMap<String Object>();//用於存放解析出來的id和對象
 public ClassPathXmlApplicationContext(String fileName) throws Exception {
  SAXBuilder sb = new SAXBuilder();
  Document doc = sbbuild(thisgetClass()getClassLoader()
    getResourceAsStream(fileName));
  Element root = docgetRootElement();
  List list = XPathselectNodes(root "/beans/bean");//獲得此節點下的所有值
  Systemoutprintln(listsize());
  for (int i = ; i < listsize(); i++) {
   Element bean = (Element) listget(i);
   String id = beangetAttributeValue("id");//獲得id對應的值
   String clazz = beangetAttributeValue("class");//獲得class對應的值
   Object o = ClassforName(clazz)newInstance();//Java反射機制根據類名生成對象
   mapContainerput(id o);//保存到map中
   Systemoutprintln(id + " " + clazz);
  }
 }
 @Override
 public Object getBean(String id) {
  return mapContainerget(id);
 }
}

  
主程序TestMain調用

復制代碼 代碼如下:
package comnjuptzhbtest;
public class TestMain {
 public static void main(String[] args) throws Exception {
  BeanFactory f = new ClassPathXmlApplicationContext(
    "com/njupt/zhb/test/samplexml");
  Object obj = fgetBean("train");//獲得標簽為train的對象
  Moveable m = (Moveable)obj;//接口調用子類
  mrun();
  // //
  Object obj = fgetBean("plane");
  Moveable m = (Moveable) obj;
  mrun();

 }
}

  
實驗結果

復制代碼 代碼如下:

train comnjuptzhbtestTrain
plane comnjuptzhbtestPlane
火車在飛奔
飛機在翱翔
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20309.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.