packageorg.frame;importjava.io.File;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.dom4j.Attribute;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importorg.junit.Test;importorg.node.Action;importorg.node.Actions;importorg.node.Result;//本类完成对xml文件的解析工作 返回解析到的list集合
public classAnalyze {
@Testpublic void print() throwsException {
List listActions =analyzeRoot();
Iterator i =listActions.iterator();while(i.hasNext()) {
Actions actions=i.next();
System.out.println("actions[Name]:" + actions.getName() + ",actions[namespace]:" +actions.getNamespace());//获得action集合
Iterator i2 =actions.getActionList().iterator();while(i2.hasNext()) {
Action action=i2.next();
System.out.println("action[Name]:" + action.getName() + ",action[class]:" +action.getClassname());//遍历result集合
Iterator i3 =action.getResultList().iterator();while(i3.hasNext()) {
Result result=i3.next();
System.out.println("result[Name]:" + result.getName() + ",result[redirect]:" +result.isRedirect()+ ",result[content]:" +result.getContent());
}
}
}
}//解析根节点的方法 最终返回actions下的所有节点集合
public List analyzeRoot() throwsException {//用于封装节点数据的集合
List listActions = new ArrayList();//创建文件
File file = new File("src/mystruts.xml");
SAXReader sax= newSAXReader();//获得dom结构
Document read =sax.read(file);//获取根节点
Element elementRoot =read.getRootElement();//一层层遍历根节点下的节点
Iterator iterator =elementRoot.elementIterator();
Actions actions= null;while(iterator.hasNext()) {
actions= newActions();//获得actions节点
Element elementActions =iterator.next();//获得actions标签的基本属性
Attribute attribute1 = elementActions.attribute("name");
Attribute attribute2= elementActions.attribute("namespace");//设置基本属性到actions对象中
actions.setName(attribute1.getValue());
actions.setNamespace(attribute2.getValue());//调用方法 返回的集合是action节点的集合
List listAction =analyzeActions(elementActions);//把action节点集合加入到actions的集合对象中
actions.setActionList(listAction);//把封装好的actions对象加入到actions集合中 返回给用户
listActions.add(actions);
}returnlistActions;
}//解析actions节点的方法 参数actions节点 最终返回的是action节点集合
public List analyzeActions(Element elementActions) throwsException {
List listAction = new ArrayList();//遍历actions节点 得到action节点
Iterator iterator =elementActions.elementIterator();
Action action= null;while(iterator.hasNext()) {
action= newAction();//得到每个action节点对象
Element elementAction =iterator.next();//获取该节点的基本属性
Attribute attribute1 = elementAction.attribute("name");
Attribute attribute2= elementAction.attribute("class");
action.setName(attribute1.getValue());
action.setClassname(attribute2.getValue());//继续调用方法 返回的是action下的result节点的集合
List listResult =analyzeAction(elementAction);//把集合封装进action中的集合属性中
action.setResultList(listResult);//最后把每个action对象 封装进上边准备的listAction集合中
listAction.add(action);
}returnlistAction;
}//解析action节点的方法 参数action节点 最终返回的是result节点集合
public List analyzeAction(Element elementAction) throwsException {
List listResult = new ArrayList();//遍历action节点 得到result节点
Iterator iterator =elementAction.elementIterator();
Result result= null;while(iterator.hasNext()) {
result= newResult();//得到每个result对象
Element elementResult =iterator.next();//得打属性对象
Attribute attribute1 = elementResult.attribute("name");
Attribute attribute2= elementResult.attribute("redirect");//进行封装
result.setName(attribute1.getValue());//但是需要注意的是 redirect属性可能获取不到 如果获取不到 设置默认值为true
String redirect = "";try {//没有异常 表示可以获取到
redirect =attribute2.getValue();
result.setRedirect(Boolean.parseBoolean(redirect));
}catch(Exception e) {//表示没有redirect属性 设置默认值
result.setRedirect(true);
}//设置文本属性
result.setContent(elementResult.getTextTrim());
listResult.add(result);
}returnlistResult;
}
}