微信消息处理JAXP-sax解析

  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

时间: 2024-08-17 06:28:54

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

微信消息处理JAXP-dom解析

1 package cn.lihainan; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.PrintWriter; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.http.HttpServlet; 10 import ja

使用JAXP进行sax解析

1 package cn.liuning.sax; 2 3 import javax.xml.parsers.SAXParser; 4 import javax.xml.parsers.SAXParserFactory; 5 6 import org.xml.sax.Attributes; 7 import org.xml.sax.ContentHandler; 8 import org.xml.sax.Locator; 9 import org.xml.sax.SAXException; 10

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

一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <students> 3 <student> 4 <name sid="111">李四</name> 5 <age>

jaxp的Sax解析

在使用DOM解析XML时候,需要读取整个XML文档,在内存架构代表整个DOM树的Document对象,从而再对XML文档操作,如果XML文件特别大,就特别消耗内存.SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作. 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器. 事件处理器由程序员自定义,继承自

XML学习笔记(二):使用 DOM和SAX 解析XML :

一.XML解析的简介 1.一般来说xml解析的方式有两种,Dom与SAX,且各有优缺点.pull是第三种方法见:pull解析XML 1)DOM:dom对象树 ①.整个XML放入内存,转换为Document对象: ②.每个元素,转换成Element对象 ③.文本,转换成Text对象 ④.属性,转换成Attribute对象 优缺点:元素的CRUD比较简单,但是内存消耗大,大的xml文档不适合. 补充:内存不足时,可以修改参数,调整JVM的内存大小 1.java.lang.OutOfMemoryErr

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

今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * 演示使用dom技术给xml中添加标签 * <book> <name id="b001">SSH</name> <author>老于</author> <price>152</price> </boo

XML 解析---dom解析和sax解析

目前XML解析的方法主要用两种: 1.dom解析:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML文档加载到内存中,生成该XML文档对应的document对象,然后把XML文档中的各个标签元素变成相应的Element对象,文本会变成Text对象,属性会变成Attribute对象,并按这些标签.文本.属性在XML文档中的关系保存这些对象的关系. 缺点:消耗内存,所以使用dom解析XML文档时不能解

dom解析和sax解析

解析xml有四种方法:DOM,SAX,DOM4j,JDOM. 我们主要学了两种:DOM和SAX. DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DOM和SAX的不同: 1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中.从而消耗很大的内存空间.而SAX是基于事件的.当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间. 2. DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能

DOM和SAX解析XML的区别

解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DOM和SAX的不同:     1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中.从而消耗很大的内存空间.而SAX是基于事件的.当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间.     2. DOM可以读取XML也可以向XM