微信消息处理JAXP-dom解析
package cn.lihainan.test;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.SimpleDateFormat; import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import org.w3c.dom.Document;
import org.w3c.dom.Node; public class Demo1 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try { // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("utf-8");
response.setContentType("textml;charset=utf-8");
InputStream inputStream = request.getInputStream(); String result = readFromInputStream(inputStream); PrintWriter out = response.getWriter(); out.println("原始消息:"); out.println(result); //解析 建立document解析
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder(); InputStream xmlStream = new ByteArrayInputStream(result.getBytes("UTF-8"));
Document document = builder.parse(xmlStream);
//定义节点 根据节点从document中找到要输出的
Node ToUserName = document.getElementsByTagName("ToUserName").item(0);
System.out.println(ToUserName.getTextContent()); Node FromUserName = document.getElementsByTagName("FromUserName").item(0);
System.out.println(FromUserName.getTextContent()); Node MsgType= document.getElementsByTagName("MsgType").item(0);
System.out.println(MsgType.getTextContent()); Node Content = document.getElementsByTagName("Content").item(0);
System.out.println(Content.getTextContent()); Node MsgId= document.getElementsByTagName("MsgId").item(0);
System.out.println(MsgId.getTextContent()); out.println();
//输出
out.println("解析结果:");
out.print("FromUserName(来自):");
out.println(FromUserName.getTextContent());
out.print("ToUserName(发送至):");
out.println(ToUserName.getTextContent());
out.print("CreateTime(时间):"); Node createTime= document.getElementsByTagName("CreateTime").item(0);
int t = Integer.parseInt(createTime.getTextContent());
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
out.println(format.format((long)t*1000L));
out.print("MsgType(消息类型):");
out.println(MsgType.getTextContent());
out.print("Content(文本内容):");
out.println(Content.getTextContent());
out.print("MsgId(文件消息标识号):");
out.println(MsgId.getTextContent());
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //将输入流InputStream变为String
public String readFromInputStream(InputStream in) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = in.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
baos.close();
in.close();
// 解析内容 看网上更改 输出中文乱码 但是未解决 已知输入流为gbk 输出为utf-8 求如何转换
byte[] lens = baos.toByteArray();
String result = new String(lens,"UTF-8"); return result; }
}
微信消息处理JAXP-dom解析的更多相关文章
- 使用jaxp对比xml进行DOM解析
/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...
- xml解析-jaxp之dom解析
package day06_parser.dom; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的 ...
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- 2.1 使用JAXP 对 xml文档进行DOM解析
//使用 jaxp 对xml文档进行dom解析 public class Demo2 { //必要步骤 @Test public void test() throws Exception { //1. ...
- XML案例(使用JAXP进行DOM解析)
1.book.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...
- dom 解析xml文件
JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- DOM的概念和简单应用:使用DOM解析XML数据
概念:DOM是Document Object Model的简称,即文档数据模型. Oracle公司提供了JAXP(Java API for XML Processing)来解析XML.JAXP会把XM ...
随机推荐
- django 学习-16 Django会话Cookie
1.django.admin.py startproject cs3 cd cs3 django.admin.py startapp blog 2. vim urls.py url ...
- autocomplete.js的使用(1):自动输入时,出现下拉选择框
autocomplete.js可以实现自动输入文本值,并出现下拉框 js引用:所需要的autocomplete文件需要在网站中自行下载. <!--自动输入文本值所需的jquery文件--> ...
- PHP实现前台同步显示后台任务进度
一次批量发送几千条短信. 如果直接在后台循环执行虽然可行,但是前台操作用户就只能坐着空等,完全看不到后台执行结果,所以考虑能不能有一种办法可以在php后台执行过程中同时在前台显示后台执行任务进度呢. ...
- C#中的 具名参数 和 可选参数
具名参数 和 可选参数 是 C# framework 4.0 出来的新特性. 一. 常规方法定义及调用 public void Demo1(string x, int y) { //do someth ...
- Xcode7,消失的pin菜单(Editor->pin)
用过autolayout的对pin都应该不陌生,通过这个选项可以设置控件的四周的外边距:Top Space.Leading Space.Trailing Space.Bottom Space. 在Xc ...
- c++之RTTI介绍
本文介绍c++的RTTI的基本用法,并初步研究RTTI的实现原理. 1. 什么是RTTI RTTI即运行时类型识别(runtime type identification),用于判断指针或引用所绑定对 ...
- Populating Next Right Pointers in Each Node II
题目地址: https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 关键思路:讲节点的左右子节 ...
- noip2006T1 能量项链
最近一直在做noip的题,由于太水一直没有写题解,可是这道题,这道题.啊啊啊啊…… 明明水的要命,调了一节课啊!!我干脆不要搞OI了啊! 特别逗比的错误啊!!!! 代码: #include <c ...
- 开始进入Windows Phone 8开发
和大家一起分享从零开始,入手Windows Phone 8开发,大家一起来吧!
- 《Linux下sed命令的使用》
grep -v 关键字 文件 文件中的关键字给过滤掉 grep -v “^关键字” 文件 以关键字开头的给过滤掉 sed -e ‘/关键字/d’文件 输出时把关键字给删除掉 以/etc ...