使用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文件的对象了,可以在其他类中使用这个对象中的信息了。

 

 

posted @ 2013-12-14 22:02  will_lau  阅读(827)  评论(0)    收藏  举报