微信消息处理JAXP-sax解析
package cn.zhaokai.sax; import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler; public class Demo1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { try {
//解决乱码问题
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//得到输入流
InputStream inputStream = request.getInputStream();
//A single input source for an XML entity
InputSource input = new InputSource(inputStream); //5步 sax解析
//1创建工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到解析器
SAXParser sp= factory.newSAXParser();
//3.得到读取器
XMLReader reader = sp.getXMLReader();
//4.设置内容处理器,TagValueHandler是单独写的函数
TagValueHandler handler= new TagValueHandler();
reader.setContentHandler(handler);
//5.读取xml文档内容
reader.parse(input);
//返回识别结果
List list = handler.getList(); //定义输出对象,输出到response
PrintWriter out = response.getWriter(); //输出原始消息
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>";
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>";
out.println("原始消息:");
if(list.get(3).equals("text"))
{
out.println(content1);
out.println("解析结果:");
out.print("FromUserName(来自):");
out.println(list.get(1));
out.print("ToUserName(发送至):");
out.println(list.get(0));
out.print("CreateTime(时间):"); //时间转换
int t = Integer.parseInt((String) list.get(2));
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
out.println(format.format((long)t*1000L)); out.print("MsgType(消息类型):");
out.println(list.get(3));
out.print("Content(文本内容):");
out.println(list.get(4));
out.print("MsgId(文本消息标识号):");
out.println(list.get(5));
}
else
{
out.println(content2);
out.println("解析结果:");
out.print("FromUserName(来自):");
out.println(list.get(1));
out.print("ToUserName(发送至):");
out.println(list.get(0));
out.print("CreateTime(时间):"); //时间转换
int t = Integer.parseInt((String) list.get(2));
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
out.println(format.format((long)t*1000L));
out.print("MsgType(消息类型):");
out.println(list.get(3));
out.print("Event(事件):");
out.println(list.get(4));
out.print("EventKey(事件值):");
out.println(list.get(5)); } } catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//解析xml文档
class TagValueHandler extends DefaultHandler{ List <String> list = new ArrayList(); private String currentTag; //记住当前解析到的是什么标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { currentTag = qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentTag = null;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException { if("ToUserName".equals(currentTag)){
list.add(new String(ch,start,length));
}
if("FromUserName".equals(currentTag)){
list.add(new String(ch,start,length));
}
if("CreateTime".equals(currentTag)){
list.add(new String(ch,start,length));
}
if("MsgType".equals(currentTag)){
list.add(new String(ch,start,length));
}
if("Content".equals(currentTag)){
list.add(new String(ch,start,length));
}
else if("Event".equals(currentTag)){
list.add(new String(ch,start,length));
}
if("MsgId".equals(currentTag)){
list.add(new String(ch,start,length));
}
else if("EventKey".equals(currentTag))
{
list.add(new String(ch,start,length));
}
} public List getList() {
return list;
}
}
微信消息处理JAXP-sax解析的更多相关文章
- javaweb学习总结十二(JAXP对XML文档进行SAX解析)
一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...
- JAXP进行DOM和SAX解析
1.常用XML的解析方式:DOM和SAX 1)DOM思想:将整个XML加载内存中,形成文档对象,所以对XML操作都对内存中文档对象进行. 2)SAX思想:一边解析,一边处理,一边释放内存资源---不允 ...
- 2.2 使用 JAXP 对XML文档进行SAX解析
使用JAXP 对 XML文档进行 SAX解析: public class Demo1 { /** * 使用JAXP对XML文档进行SAX解析 * @throws Exception * @throws ...
- 使用JAXP进行sax解析
package cn.liuning.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactor ...
- JAXP的SAX解析
* 使用Sax解析XML文档 * * 使用Sax解析文档和DOM解析不一样. * 概述: * 是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一 ...
- XML案例(使用JAXP进行SAX解析)
1.Book.java package cn.itcast.sax; public class Book { private String name; private String author; p ...
- DOM综合案例、SAX解析、StAX解析、DOM4J解析
今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...
- dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程
*1 dom4j解析器 1)CRUD的含义:CreateReadUpdateDelete增删查改 2)XML解析器有二类,分别是DOM和SAX(simple Api for xml). ...
- Android XML文档解析(一)——SAX解析
---------------------------------------------------------------------------------------------------- ...
随机推荐
- Ajax中get提交和post提交的区别
$.post("HandlerLiuYan.ashx", { leixing: leixing, danwei: danwei, liuyan: liuyan, name: nam ...
- MyContentProvider
package com.example.shad_fnst.mycontentprovider; import android.app.Activity; import android.content ...
- 20141030--SQL2008常用命令-1
create database biao2--创建新的数据库 go use biao2 go create table shuiguo--创建表shuiguo ,create table创建表 ( 序 ...
- hdu 1102 Constructing Roads Kruscal
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:这道题实际上和hdu 1242 Rescue 非常相似,改变了输入方式之后, 本题实际上更 ...
- 【leetcode】368. Largest Divisible Subset
题目描述: Given a set of distinct positive integers, find the largest subset such that every pair (Si, S ...
- 1.配置EditPuls-编译和运行java程序
1.工具>配置自定义工具 2.添加工具>程序 1).编译java程序 2).运行java程序
- 大数求模 sicily 1020
Search
- mobileconfig文件的签名和认证(signed、verified)
专题:基于IOS上MDM技术相关资料整理及汇总mobileconfig文件的签名和认证(signed.verified) 一.功能描述: 鉴于我们的设备和MDM server之间已经可以通信,并能完成 ...
- oracle11.0.2 64位版本 Toad连接
今天重装了系统 oracle oracle客户端 之前连不上toad 今天总结 客户端路径:E:\app\ruonanxiao-pc\product\11.2.0\client_1 服务端路径:E: ...
- adb连接不上手机
昨天电脑重装了系统,今天打开之前的eclips工作环境,点击run as -> android application,一直报各种诡异的错误,总之就是连接不上手机. 其中包括 Adb conne ...