package saxexample; import java.util.hashmap; import org.xml.sax.*; import org.xml.sax.helpers.defaulthandler; /** * 继承defaulthandler类,用sax实现对xml的遍历 * @author cuiweibing * @since 2007.8.8 */ public class saxhandler extends defaulthandler { //存放所有的节点(这里的节点等于原来的节点+编号)以及它所对应的值 private hashmap<string,string> hashmap = new hashmap<string,string>(); //目前的节点 private string currentelement = null; //目前节点所对应的值 private string currentvalue = null; //用于节点编号(具体到person) private static int i=-1; public hashmap gethashmap() { return hashmap; } public void characters(char[] ch, int start, int length) throws saxexception { //取出目前节点对应的值 currentvalue = new string(ch, start, length); } public void startelement(string uri, string localname, string qname, attributes attr) throws saxexception { if(qname.equalsignorecase("student")){ //currentelement= ""; }else if (qname.equalsignorecase("person")){ i++; //currentelement= ""; string age=attr.getvalue("age"); if(age!=null){ hashmap.put(qname+"-age"+i, age); }else{ hashmap.put(qname+"-age"+i, "20"); } }else if (qname.equalsignorecase("college")){ currentelement= qname; string leader=attr.getvalue("leader"); if(leader!=null){ hashmap.put(qname+"-leader"+i, leader); }else{ hashmap.put(qname+"-leader"+i, "leader"); } }else{ currentelement= qname; } } public void endelement(string uri, string localname, string qname) throws saxexception { if (qname.equalsignorecase("student")){ // hashmap.put(currentelement, currentvalue); }else if (qname.equalsignorecase("person")){ }else{ currentelement+=i; hashmap.put(currentelement, currentvalue); } } }
|