java

位置:IT落伍者 >> java >> 浏览文章

java 使用JDOM解析xml文件


发布日期:2018年09月27日
 
java 使用JDOM解析xml文件
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
火车在飞奔
飞机在翱翔               

上一篇:Java 图片压缩实现思路及代码

下一篇:java匹配中文汉字的正则表达式