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解析的更多相关文章

  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. C# 文件相关操作

    百度搜的,下面这个写的挺全的.   FROM Pegasus923 http://www.cnblogs.com/pegasus923/archive/2011/01/26/1944838.html ...

  2. 破解软件感悟-PE文件格式之实例总结(五)

    有很多介绍PE文件的文章,但是我打算写一篇关于输入表的文章,因为它对于破解很有用.     我想解释它的最好的方法是举一个例子,你可以跟着我逐步深入,一步一步的思考,最后你将完全明白,我选择了一个我刚 ...

  3. php学习笔记4--php中的变量作用域

    变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是: ...

  4. 各种LICENSE的作用--GET

    许 多开发者和设计者希望把他们的作品作为开源项目共享,他们希望其他人能够利用和共享他们的代码. 而各种开源社区就是因为这个原因而充满活力.开源软件可以用于你能想象得到的任何应用程序,许多web设计人员 ...

  5. Part 13 Create a custom filter in AngularJS

    Custom filter in AngularJS 1. Is a function that returns a function 2. Use the filter function to cr ...

  6. 从ASP.NET的web1子界面刷新打开web1的web0父界面

    单击web0界面的按钮bt1触发一下代码: protected void btnSave_Click(object sender, EventArgs e) { string parentJs = @ ...

  7. 二叉树-你必须要懂!(二叉树相关算法实现-iOS)

    这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...

  8. C#代码配置IIS 操纵IIS

    前言: IIS到目前经历了四个版本分别为 IIS4.0  IIS5.0 IIS6.0 IIS7.0,其中IIS6.0 IIS7.0是在5.0的安全问题的基础上获得的发展,目前为止.6.0版本以后的都是 ...

  9. 解决IE6下固定定位问题 使用position:fixed

    IE6浏览器有太多的bug让制作网页的人头疼.这篇文章介绍的是介绍的是如何解决IE6不支持position:fixed;属性的办法. 如果我们需要做某个元素始终位于浏览器的底部,不会因为浏览器窗口的缩 ...

  10. ListView 总结----持续中

    ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用的依 ...