sax解析XML文件
发布时间:2020-12-16 05:43:26 所属栏目:百科 来源:网络整理
导读:要解析的persons.xml文件内容如下: ?xml version="1.0" encoding="UTF-8"? persons person id="1" name张三/name age34/age /person person id ="2" name李四/name age24/age /person /persons 程序代码文件MyHandler.java public class MyHandler extends
要解析的persons.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>张三</name> <age>34</age> </person> <person id ="2"> <name>李四</name> <age>24</age> </person> </persons> 程序代码文件MyHandler.java 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 MyHandler(String nodeName) { // TODO Auto-generated constructor stub this.nodeName = nodeName; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub //当读到第一个开始标签的时候,会触发这个方法 //System.out.println("当读到第一个开始标签的时候,会触发这个方法"); list = new ArrayList<HashMap<String,String>>(); } @Override public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException { //System.out.println("当遇到文档的开头的时候,调用这个方法"); //当遇到文档的开头的时候,调用这个方法 //System.out.println("qName="+qName +" nodeName="+nodeName); 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 { //System.out.println("这个方法是用来处理xml文件所读取到的内容"); //这个方法是用来处理xml文件所读取到的内容 if(currentTag!=null&&map!=null){ currentValue = new String(ch,start,length); if(currentValue !=null && !currentValue.trim().equals("") && !currentValue.trim().equals("n")){ map.put(currentTag,currentValue); } } currentTag = null;//把当前的节点的对应的值和标签设置为空 currentValue = null; } @Override public void endElement(String uri,String qName) throws SAXException { //System.out.println("遇到结束标记的时候,会调用这个方法"); //遇到结束标记的时候,会调用这个方法 if(qName.equals(nodeName)){ list.add(map); map = null; } // TODO Auto-generated method stub super.endElement(uri,localName,qName); } public List<HashMap<String,String>> getList() { return list; } saxService.java public class saxService { public saxService() { // TODO Auto-generated constructor stub } public static List<HashMap<String,String>> readXML(InputStream inputStream,String nodeName){ System.out.println("进入readXML"); List<HashMap<String,String>> list =null; try { //创建一个解析xml的工厂对象 //会对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 public class HttpUtils { public HttpUtils() { // TODO Auto-generated constructor stub } public static InputStream getXML(String path){ System.out.println("进到httpUtils"); InputStream inputStream = null; try { URL url = new URL(path); System.out.println("url="+url.toString()); if(url != null){ HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(3000);//延时时间3秒 connection.setDoInput(true);// 设置是否从httpUrlConnection读入,默认情况下是true; connection.setRequestMethod("GET"); int code = connection.getResponseCode();//验证连接服务器是否成功,没有密码时,返回200为成功,有密码时返回401为成功 System.out.println("code="+code); if(code == 200){ inputStream = connection.getInputStream(); } } } catch (Exception e) { // TODO: handle exception } return inputStream; } }测试类Test.java public class Test { public Test() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String path="http://chinese-1c71864:8080/android_sax_xml/person.xml"; //连接服务器,取回xml文件内容 InputStream inputStream = HttpUtils.getXML(path); try { // List<HashMap<String,String>> list = saxService.readXML(inputStream,"person"); //遍历循环读书list里的内容 for(HashMap<String,String> map : list){ System.out.println(map.toString()); } } catch (Exception e) { // TODO: handle exception } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |