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. } catch (ParserConfigurationException e) {
  107. // TODO Auto-generated catch block
  108. e.printStackTrace();
  109. } catch (SAXException e) {
  110. // TODO Auto-generated catch block
  111. e.printStackTrace();
  112. }
  113. }
  114. }
  115. //解析xml文档
  116. class TagValueHandler extends DefaultHandler{
  117.  
  118. List <String> list = new ArrayList();
  119.  
  120. private String currentTag; //记住当前解析到的是什么标签
  121. @Override
  122. public void startElement(String uri, String localName, String qName,
  123. Attributes attributes) throws SAXException {
  124.  
  125. currentTag = qName;
  126. }
  127. @Override
  128. public void endElement(String uri, String localName, String qName)
  129. throws SAXException {
  130. currentTag = null;
  131. }
  132. @Override
  133. public void characters(char[] ch, int start, int length)
  134. throws SAXException {
  135.  
  136. if("ToUserName".equals(currentTag)){
  137. list.add(new String(ch,start,length));
  138. }
  139. if("FromUserName".equals(currentTag)){
  140. list.add(new String(ch,start,length));
  141. }
  142. if("CreateTime".equals(currentTag)){
  143. list.add(new String(ch,start,length));
  144. }
  145. if("MsgType".equals(currentTag)){
  146. list.add(new String(ch,start,length));
  147. }
  148. if("Content".equals(currentTag)){
  149. list.add(new String(ch,start,length));
  150. }
  151. else if("Event".equals(currentTag)){
  152. list.add(new String(ch,start,length));
  153. }
  154. if("MsgId".equals(currentTag)){
  155. list.add(new String(ch,start,length));
  156. }
  157. else if("EventKey".equals(currentTag))
  158. {
  159. list.add(new String(ch,start,length));
  160. }
  161. }
  162.  
  163. public List getList() {
  164. return list;
  165. }
  166. }

微信消息处理JAXP-sax解析的更多相关文章

  1. javaweb学习总结十二(JAXP对XML文档进行SAX解析)

    一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...

  2. JAXP进行DOM和SAX解析

    1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ...

  3. 2.2 使用 JAXP 对XML文档进行SAX解析

    使用JAXP 对 XML文档进行 SAX解析: public class Demo1 { /** * 使用JAXP对XML文档进行SAX解析 * @throws Exception * @throws ...

  4. 使用JAXP进行sax解析

    package cn.liuning.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactor ...

  5. JAXP的SAX解析

    * 使用Sax解析XML文档  *   * 使用Sax解析文档和DOM解析不一样.  * 概述:  * 是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一 ...

  6. XML案例(使用JAXP进行SAX解析)

    1.Book.java package cn.itcast.sax; public class Book { private String name; private String author; p ...

  7. DOM综合案例、SAX解析、StAX解析、DOM4J解析

    今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...

  8. dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程

    *1 dom4j解析器   1)CRUD的含义:CreateReadUpdateDelete增删查改   2)XML解析器有二类,分别是DOM和SAX(simple Api for xml).     ...

  9. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. [转]如何编译tizen源码(图文教程)?

    http://blog.csdn.net/flydream0/article/details/9004746 前一篇文章已经介绍了如何下载tizen源码(http://blog.csdn.net/fl ...

  2. Convolution and Deconvolution

    1.Introduction 2.Convolution 3.Deconvolution 4.Summary

  3. Jquery插件(CKEditor)

    描述 在html页面实现像word一样的编辑功能(可视化HTML编辑器) 解决方法 ckeditor插件官方网站 http://ckeditor.com/ 使用 1:去官方下载ckeditor插件,添 ...

  4. 深入浅出ExtJS 第五章 树形结构

    5.1 TreePanel的基本使用 //树是一种非常典型的数据结构; 5.1.1 创建一棵树 //树控件有Ext.tree.TreePanel类定义,控件的名称为TreePanel;TreePane ...

  5. 零碎记录Hadoop平台各组件使用

    >20161011 :数据导入研究    0.sqoop报warning,需要安装accumulo:    1.下载Microsoft sql server jdbc, 使用ie下载,将42版j ...

  6. 常用的CSS缩写语法一些方法小结

    使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.css缩写的主要规则如下: 颜色 16进制的色彩值,如果每两位的值相同,可以缩写一半,例如: #000000可以缩写为#000;#336699可以 ...

  7. JAVA 模糊查询方法

    当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where ...

  8. Memcached解决单台服务器故障问题

    <beitmemcached> <add key="name1" value="server1:port" /> <add key ...

  9. redis setnx 分布式锁

    private final String RedisLockKey = "RedLock"; private final long altTimeout = 1 * 60 * 60 ...

  10. ArcGIS 坐标系统文件

    坐标是GIS数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. ArcGIS自带了多种坐标系统,在${ArcGISHome}Coordinate Systems目录下可 ...