标签:
MyHandler.java
package com.sax.handler; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler { private HashMap<String,String> map=null; //存储单个解析的完整对象 private List<HashMap<String,String>> list=null; //存储所有解析对象 private String currentTag=null; //正在解析的元素标签 private String currentValue=null; //解析的当前元素值 private String nodeName=null; //解当前的节点名称 public List<HashMap<String, String>> getList() { return list; } public MyHandler(String nodeName) { this.nodeName=nodeName; } @Override public void startDocument() throws SAXException { //读到第一个标签,触发这个方法 list=new ArrayList<HashMap<String,String>>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //读到文档开头,触发这个方法 if(qName.equals(nodeName)) { map=new HashMap<String,String>(); } if(attributes!=null&&map!=null) { for(int i=0;i<attributes.getLength();i++) { map.put(attributes.getQName(i),attributes.getValue(i)); } } currentTag=qName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 这个方法是处理读取到xml文件的内容 if(currentTag!=null && map!=null) { currentValue=new String(ch, start, length); if(currentValue!=null&& !currentValue.trim().equals("") && !currentValue.equals("\n")); map.put(currentTag,currentValue); } currentTag=null; //把当前节点对应的值和标签设置为空 currentValue=null; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 遇到结束标记的时候,会调用这个方法 if(qName.equals(nodeName)) { list.add(map); map=null; } } }
SaxServers.java
package com.sax.handler; import java.io.InputStream; import java.util.HashMap; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class SaxServers { public SaxServers() { // TODO Auto-generated constructor stub } public static List<HashMap<String,String>> readXml(InputStream inputStream,String nodeName) { List<HashMap<String,String>> list=null; try { //创建一个解析XML的工厂对象 SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser parser=spf.newSAXParser();//解析XML MyHandler handler=new MyHandler(nodeName); parser.parse(inputStream,handler); inputStream.close(); return handler.getList(); } catch (Exception e) { // TODO: handle exception return list; } } }
HttpUtils.java
package com.sax.handler; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpUtils { public HttpUtils() { // TODO Auto-generated constructor stub } public static InputStream getXML(String path) { InputStream inputStream=null; try { URL url=new URL(path); if(url!=null) { HttpURLConnection connection=(HttpURLConnection)url.openConnection(); connection.setConnectTimeout(3000); connection.setDoInput(true); connection.setRequestMethod("GET"); int code=connection.getResponseCode(); if(code==200) { inputStream=connection.getInputStream(); } } } catch (Exception e) { // TODO: handle exception } return inputStream; } }
Text.java
package com.sax.handler; import java.io.InputStream; import java.util.HashMap; import java.util.List; public class Text { public Text() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String path="http://weikew.gotoip55.com/person.xml"; InputStream inputstream=HttpUtils.getXML(path); try { List<HashMap<String,String>> list=SaxServers.readXml(inputstream, "person"); for(HashMap<String,String> map:list) { System.out.println(map.toString()); } } catch (Exception e) { // TODO: handle exception } } }
标签:
原文地址:http://www.cnblogs.com/zywf/p/4844716.html