java中如何使用JDOM解析xml文件呢?以下小编就用实例为大家详细的介绍一下
需要的朋友可以参考下
JDOM是一个开源项目它基于树型结构利用纯JAVA的技术对XML文档实现解析生成序列化以及多种操作JDOM直接为JAVA编程服务它利用更为强有力的JAVA语言的诸多特性(方法重载集合概念以及映射)把SAX和DOM的功能有效地结合起来
JDOM的官方地址
首先新建一个接口和个类为后续做准备
[Moveablejava]
复制代码 代码如下:
package com
njupt
zhb
test;
public interface Moveable {
void run();
}
[Planejava]
复制代码 代码如下:
package com
njupt
zhb
test;
public class Plane implements Moveable {
@Override
public void run() {
// TODO Auto
generated method stub
System
out
println("飞机在翱翔
");
}
}
[Trainjava]
复制代码 代码如下:
package com
njupt
zhb
test;
public class Train implements Moveable{
@Override
public void run() {
System
out
println("火车在飞奔
");
}
}
新建一个接口主程序可以调用getBean方法获得相应的对象
复制代码 代码如下:
package com
njupt
zhb
test;
public interface BeanFactory {
Object getBean(String id);
}
需要解析的xml文件如下
复制代码 代码如下:
<?xml version="
" encoding="UTF
"?>
<beans>
<bean
id="train"
class="com
njupt
zhb
test
Train">
</bean>
<bean
id="plane"
class="com
njupt
zhb
test
Plane">
</bean>
</beans>
解析文件的主类实现了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 =
; 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);
}
}
主程序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 obj
= f
getBean("train");//获得标签为train的对象
Moveable m
= (Moveable)obj
;//接口调用子类
m
run();
// //
Object obj
= f
getBean("plane");
Moveable m
= (Moveable) obj
;
m
run();
}
}
实验结果
复制代码 代码如下:
train com
njupt
zhb
test
Train
plane com
njupt
zhb
test
Plane
火车在飞奔
飞机在翱翔