JDOMによるxmlファイルの解析

3434 ワード

JDOMによるxmlファイルの解析
JDOMは、ツリー型構造に基づいて、XMLドキュメントの解析、生成、シーケンス化、およびさまざまな操作を純粋なJAVAテクノロジーで実現するオープンソースプロジェクトです.JDOMは直接JAVAプログラミングサービスを提供します.より強力なJAVA言語の多くの特性(方法の再ロード、集合概念、マッピング)を利用して、SAXとDOMの機能を効果的に結合しています.JDOMの公式アドレス:http://www.jdom.org/参考:馬兵士設計モデル工場モデル1.まず1つのインタフェースと2つのクラスを新設し、後続の準備を行う
[Moveable.java]
package com.njupt.zhb.test;


public interface Moveable {
	void run();
}

[Plane.java]
package com.njupt.zhb.test;

public class Plane implements Moveable {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("     .....");
	}

}

[Train.java]
package com.njupt.zhb.test;


public class Train implements Moveable{

	@Override
	public void run() {
		System.out.println("     ....");
	}
	
}

2.新しいインタフェースを作成します.メインプログラムはgetBeanメソッドを呼び出し、対応するオブジェクトを取得できます.
package com.njupt.zhb.test;

public interface BeanFactory {
	Object getBean(String id);
}

3.解析するxmlファイルは以下の通りです.
<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean 
	    id="train"
	    class="com.njupt.zhb.test.Train">
	</bean>
	<bean
	    id="plane"
	    class="com.njupt.zhb.test.Plane">
	</bean>
</beans>

4.ファイルの主クラスを解析し、BeanFactoryインタフェースを実現した.
package com.njupt.zhb.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

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 = sb.build(this.getClass().getClassLoader()
				.getResourceAsStream(fileName));
		Element root = doc.getRootElement();
		List list = XPath.selectNodes(root, "/beans/bean");//          
		System.out.println(list.size());
		for (int i = 0; i < list.size(); i++) {
			Element bean = (Element) list.get(i);
			String id = bean.getAttributeValue("id");//  id    
			String clazz = bean.getAttributeValue("class");//  class    
			Object o = Class.forName(clazz).newInstance();//Java    ,        
			mapContainer.put(id, o);//   map 
			System.out.println(id + " " + clazz);
		}
	}

	@Override
	public Object getBean(String id) {
		return mapContainer.get(id);
	}

}

5.メインプログラムTestMain呼び出し.
package com.njupt.zhb.test;


public class TestMain {
	public static void main(String[] args) throws Exception {
		BeanFactory f = new ClassPathXmlApplicationContext(
				"com/njupt/zhb/test/sample.xml");
		Object obj1 = f.getBean("train");//     train   
		Moveable m1 = (Moveable)obj1;//      
		m1.run();
		// //----------------------
		Object obj2 = f.getBean("plane");
		Moveable m2 = (Moveable) obj2;
		m2.run();
		
	}
}

実験結果:
2
train com.njupt.zhb.test.Train
plane com.njupt.zhb.test.Plane
     ....
     .....

ソースコードのダウンロードアドレス:http://download.csdn.net/detail/nuptboyzhb/5756633