package test02.litestruts.sax; import java.util.HashMap; import test02.litestruts.Action; public class SAXParserDemo{ public static Action run( ){ //创建实例 SAXParser parser = SAXParser.getInstance(); //为解析器设置好各个事件的回调函数 parser.setHandler(new SAXParserHandler() { //创建好自定义变量,用以记录XML文档中需要的数据 String resultName = ""; String className = ""; HashMap<String, String> resultJspMap = new HashMap<>(); boolean foundClass = false; //当解析开始时调用 @Override public void startDocument() { System.out.println("Start parsing"); } //当完成一个XML开始标签(例如<XXX>)的解析时调用 @Override public void startElement(String tagName, HashMap<String, String> attributes) { if(tagName.equals("action")){ if(attributes.get("name").equals("login")){ className = attributes.get("class"); foundClass = true; }else{ foundClass = false; } }else if(tagName.equals("result") && foundClass){ resultName = attributes.get("name"); } } //当完成一个XML结束标签(例如</XXX>)的解析时调用 @Override public void endElement(String tagName) { } //当一段XML标签之间的内容被解析完成时调用 @Override public void innerText(String innerText) { if(foundClass){ String jsp = innerText; resultJspMap.put(resultName,jsp); } } @Override //当解析器读到XML文档结尾时调用 public Action endDocument() { System.out.println(className); System.out.println(resultJspMap); System.out.println("End parsing"); Action action=new Action(); action.setClassName(className); action.setResultJspMap(resultJspMap); return action; } }); //调用此方式,开始解析 return parser.parse("src/test02/litestruts/struts.xml"); } }