使用Jdom2解析xml文件
这个博客主要用来记录学习的一些感悟以及转载一些我需要的文章
首先有这么样一个xml文件
<action-controller> <action> <name>logout</name> <class> <name>com.mywork.action.LogoutAction</name> <method>execute</method> </class> <result> <name>success</name> <type>redirect</type> <value>logout.jsp</value> </result> </action> </action-controller>
需要把这个文件解析出来,用来查找action以及用反射机制来动态生成实例。
首先就构造一个与xml结构相同的类
public class ActionConfig { private String actionName; private String className; private String calssMethod; private List<Result> result;
.....(省略setter and getter 方法) }
这个类里面包括了一个list的类,因为一个action可能产生多个result,下面是result类
public class Result {
private String resultName;
private String resultType;
private String resultValue;
....(省略setter & getter 方法)
}
导入jdom包,利用SAXBuilder 和 Document 对象来操作这个xml文件,这里jdom包的版本是 jdom-2.0.5
下面是解析的过程
public class ActionParser {
public List<ActionConfig> getActionList(){
SAXBuilder sb=new SAXBuilder();
ArrayList<ActionConfig> actionList = new ArrayList<ActionConfig>(); //build the action list
try {
Document doc=sb.build(this.getClass().getClassLoader().getResource("controller.xml").getPath()); //构造文档对象 //这里是获取相对路径下的controller.xml
//Document doc=sb.build("controller.xml"); don't work!!
Element root=doc.getRootElement(); //获取根元素
List<Element> action=root.getChildren("action");//
for(int i=0;i<action.size();i++){
ActionConfig ac = new ActionConfig();
Element actionElement=action.get(i);
ac.setActionName(actionElement.getChildText("name")); // get the action name
Element nameElement=actionElement.getChild("class");
ac.setClassName(nameElement.getChildText("name"));
ac.setCalssMethod(nameElement.getChildText("method"));
List<?> resultList = actionElement.getChildren("result");
List<Result> result = new ArrayList<Result>(); // get the size of the result set
// build the result set
for(int j=0;j<resultList.size();j++)
{
Element resultElement=(Element)resultList.get(j);
Result rs = new Result();
rs.setResultName(resultElement.getChildText("name"));
rs.setResultType(resultElement.getChildText("type"));
rs.setResultValue(resultElement.getChildText("value"));
result.add(rs);
}
ac.setResult(result);
}
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return actionList;
}
前面打开controller.xml的方式其实我也不太明白,不过看样子是要找到目标文件再取目标文件的路径。
这样就构造出一个xml文件的对象了,可以在其他类中使用这个对象中的信息了。

浙公网安备 33010602011771号