标签:style blog http java color os
1 package cn.zhaokai.sax; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.PrintWriter; 6 import java.text.SimpleDateFormat; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import javax.xml.parsers.ParserConfigurationException; 15 import javax.xml.parsers.SAXParser; 16 import javax.xml.parsers.SAXParserFactory; 17 18 import org.xml.sax.Attributes; 19 import org.xml.sax.InputSource; 20 import org.xml.sax.Locator; 21 import org.xml.sax.SAXException; 22 import org.xml.sax.XMLReader; 23 import org.xml.sax.helpers.DefaultHandler; 24 25 public class Demo1 extends HttpServlet { 26 27 public void doPost(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 30 try { 31 //解决乱码问题 32 request.setCharacterEncoding("UTF-8"); 33 response.setContentType("text/html;charset=UTF-8"); 34 //得到输入流 35 InputStream inputStream = request.getInputStream(); 36 //A single input source for an XML entity 37 InputSource input = new InputSource(inputStream); 38 39 //5步 sax解析 40 //1创建工厂 41 SAXParserFactory factory = SAXParserFactory.newInstance(); 42 //得到解析器 43 SAXParser sp= factory.newSAXParser(); 44 //3.得到读取器 45 XMLReader reader = sp.getXMLReader(); 46 //4.设置内容处理器,TagValueHandler是单独写的函数 47 TagValueHandler handler= new TagValueHandler(); 48 reader.setContentHandler(handler); 49 //5.读取xml文档内容 50 reader.parse(input); 51 //返回识别结果 52 List list = handler.getList(); 53 54 //定义输出对象,输出到response 55 PrintWriter out = response.getWriter(); 56 57 //输出原始消息 58 String content1 = "<xml><ToUserName><![CDATA[gh_1c586f95bd68]]></ToUserName><FromUserName><![CDATA[ogNtkuMTj4uOx-DCvLfu8mUDmubM]]></FromUserName><CreateTime>1403313142</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[软件孵化实验室]]></Content><MsgId>6027184051137754303</MsgId></xml>"; 59 String content2 = "<xml><ToUserName><![CDATA[gh_1c586f95bd68]]></ToUserName><FromUserName><![CDATA[ogNtkuMTj4uOx-DCvLfu8mUDmubM]]></FromUserName><CreateTime>1403313091</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[I_SDUT_SIL]]></EventKey></xml>"; 60 out.println("原始消息:"); 61 if(list.get(3).equals("text")) 62 { 63 out.println(content1); 64 out.println("解析结果:"); 65 out.print("FromUserName(来自):"); 66 out.println(list.get(1)); 67 out.print("ToUserName(发送至):"); 68 out.println(list.get(0)); 69 out.print("CreateTime(时间):"); 70 71 //时间转换 72 int t = Integer.parseInt((String) list.get(2)); 73 SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); 74 out.println(format.format((long)t*1000L)); 75 76 out.print("MsgType(消息类型):"); 77 out.println(list.get(3)); 78 out.print("Content(文本内容):"); 79 out.println(list.get(4)); 80 out.print("MsgId(文本消息标识号):"); 81 out.println(list.get(5)); 82 } 83 else 84 { 85 out.println(content2); 86 out.println("解析结果:"); 87 out.print("FromUserName(来自):"); 88 out.println(list.get(1)); 89 out.print("ToUserName(发送至):"); 90 out.println(list.get(0)); 91 out.print("CreateTime(时间):"); 92 93 //时间转换 94 int t = Integer.parseInt((String) list.get(2)); 95 SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); 96 out.println(format.format((long)t*1000L)); 97 out.print("MsgType(消息类型):"); 98 out.println(list.get(3)); 99 out.print("Event(事件):"); 100 out.println(list.get(4)); 101 out.print("EventKey(事件值):"); 102 out.println(list.get(5)); 103 104 } 105 106 107 108 } catch (ParserConfigurationException e) { 109 // TODO Auto-generated catch block 110 e.printStackTrace(); 111 } catch (SAXException e) { 112 // TODO Auto-generated catch block 113 e.printStackTrace(); 114 } 115 } 116 } 117 //解析xml文档 118 class TagValueHandler extends DefaultHandler{ 119 120 List <String> list = new ArrayList(); 121 122 private String currentTag; //记住当前解析到的是什么标签 123 @Override 124 public void startElement(String uri, String localName, String qName, 125 Attributes attributes) throws SAXException { 126 127 currentTag = qName; 128 } 129 @Override 130 public void endElement(String uri, String localName, String qName) 131 throws SAXException { 132 currentTag = null; 133 } 134 @Override 135 public void characters(char[] ch, int start, int length) 136 throws SAXException { 137 138 if("ToUserName".equals(currentTag)){ 139 list.add(new String(ch,start,length)); 140 } 141 if("FromUserName".equals(currentTag)){ 142 list.add(new String(ch,start,length)); 143 } 144 if("CreateTime".equals(currentTag)){ 145 list.add(new String(ch,start,length)); 146 } 147 if("MsgType".equals(currentTag)){ 148 list.add(new String(ch,start,length)); 149 } 150 if("Content".equals(currentTag)){ 151 list.add(new String(ch,start,length)); 152 } 153 else if("Event".equals(currentTag)){ 154 list.add(new String(ch,start,length)); 155 } 156 if("MsgId".equals(currentTag)){ 157 list.add(new String(ch,start,length)); 158 } 159 else if("EventKey".equals(currentTag)) 160 { 161 list.add(new String(ch,start,length)); 162 } 163 } 164 165 public List getList() { 166 return list; 167 } 168 }
微信消息处理JAXP-sax解析,布布扣,bubuko.com
标签:style blog http java color os
原文地址:http://www.cnblogs.com/liun1994/p/3834636.html