Dom4j解析XML文件(Xpath)

用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章