用Dom4j解析一个struts.xml文件主要的使用的是XML文件 可能算法比较烂 当文件比较的时候会搜索比较慢.要用到的2的Dom4j的jar包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
<?xml version="1.0" encoding="UTF-8"?>
<struts-config>
<form-beans>
<form-bean name="addForm"
type="beans.UserInfoBean" />
</form-beans>
<action-mappings>
<action name="addForm" path="/add" scope="request" type="servlets.LoginAction">
<forward name="success" path="success.jsp" />
<forward name="error" path="error.jsp" />
</action>
</action-mappings>
</struts-config>
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class StrutsXmlSax {
public static Document getDocument(String url) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}
public List<HashMap<String, ActionBean>> parse(Document document){
List<HashMap<String, ActionBean>> list = new ArrayList<HashMap<String,ActionBean>>(); //总的List集合
HashMap<String, ActionBean> hashMap = new HashMap<String, ActionBean>();
List formBeans = document.selectNodes("//form-beans/form-bean"); //form-beans的集合
List actionMappings = document.selectNodes("//action-mappings/action");
for (Iterator iterator = formBeans.iterator(); iterator.hasNext();) {
Node node1 = (Node) iterator.next();
String name1= node1.valueOf("@name");
for (Iterator iterator2 = actionMappings.iterator(); iterator2.hasNext();) {
Node node2 = (Node) iterator2.next();
String name2 = node2.valueOf("@name");
if(name1.equals(name2)){
String key = node1.valueOf("@type");
ActionBean value = new ActionBean();
value.setPath(node2.valueOf("@path"));
value.setScope(node2.valueOf("@scope"));
value.setType(node2.valueOf("@type"));
HashMap<String, String> forwards = new HashMap<String, String>();
List l=node2.selectNodes("//action-mappings/action[@name='"+name2+"']/forward");
for (Iterator iterator3 = l.iterator(); iterator3.hasNext();) {
Node node3 = (Node) iterator3.next();
forwards.put(node3.valueOf("@name"), node3.valueOf("@path"));
}
value.setForward(forwards);
//添加所有的信息到HashMap中
hashMap.put(key, value);
list.add(hashMap);
}
}
}
return list;
}
public static void main(String[] args) {
try {
List list =new StrutsXmlSax().parse(getDocument("struts-config.xml"));
for (int i = 0; i < list.size(); i++) {
HashMap<String, ActionBean> map1 = (HashMap<String, ActionBean>) list.get(i);
Set s =map1.keySet();
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
String object = (String) iterator.next();
System.out.println(object);
ActionBean value =map1.get(object);
System.out.println(value);
HashMap<String, String> map2 = (HashMap<String, String>) value.getForward();
Set s1 =map2.keySet();
System.out.println(s1.size());
for (Iterator iterator2 = s1.iterator(); iterator2
.hasNext();) {
String object2 = (String) iterator2.next();
System.out.println(object2);
System.out.println(map2.get(object2));
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
要运行结果:
beans.UserInfoBean
ActionBean [forward={error=error.jsp, success=success.jsp}, path=/add, scope=request, type=servlets.LoginAction]
2
error
error.jsp
success
success.jsp