文档章节

JAVA 常用的xml工具类

苏别v
 苏别v
发布于 2017/05/09 17:37
字数 648
阅读 86
收藏 1
xml

主要分为

1:解析request流对象InputStream 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

2.解析String类型的xml流对象InputStream
   解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。

3.获取子结点的xml

用于微信支付  通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.

package com.htht.tourism.utils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

/**
 * xml工具类
 *
 */
public final class XMLUtil {

    private XMLUtil() {
        throw new Error("工具类不能实例化!");
    }

    /**
     * 解析request流对象InputStream 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
     */
    @SuppressWarnings("all")
    public static Map<String, String> doXMLParse(final HttpServletRequest request) throws JDOMException, IOException {
        Map<String, String> m = new HashMap<String, String>();
        SAXBuilder builder = new SAXBuilder();
        ServletInputStream in = request.getInputStream();
        Document doc = builder.build(in);
        Element root = doc.getRootElement();
        List<Object> list = root.getChildren();
        Iterator<Object> it = list.iterator();
        while (it.hasNext()) {
            Element e = (Element) it.next();
            String k = e.getName();
            String v = "";
            List children = e.getChildren();
            if (children.isEmpty()) {
                v = e.getTextNormalize();
            } else {
                v = XMLUtil.getChildrenText(children);
            }

            m.put(k, v);
        }

        // 关闭流
        in.close();
        return m;
    }

    /**
     * 解析String类型的xml流对象InputStream
     * 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
     */
    @SuppressWarnings("all")
    public static Map<String, String> doXMLParse(final String strxml) throws JDOMException, IOException {
        if (null == strxml || "".equals(strxml)) {
            return null;
        }

        Map<String, String> m = new HashMap<String, String>();
        InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build(in);
        Element root = doc.getRootElement();
        List list = root.getChildren();
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Element e = (Element) it.next();
            String k = e.getName();
            String v = "";
            List children = e.getChildren();
            if (children.isEmpty()) {
                v = e.getTextNormalize();
            } else {
                v = XMLUtil.getChildrenText(children);
            }
            m.put(k, v);
        }

        // 关闭流
        in.close();

        return m;
    }

    /**
     * 获取子结点的xml
     */
    @SuppressWarnings("all")
    private static String getChildrenText(final List children) {
        StringBuffer sb = new StringBuffer();
        if (!children.isEmpty()) {
            Iterator it = children.iterator();
            while (it.hasNext()) {
                Element e = (Element) it.next();
                String name = e.getName();
                String value = e.getTextNormalize();
                List list = e.getChildren();
                sb.append("<" + name + ">");
                if (!list.isEmpty()) {
                    sb.append(XMLUtil.getChildrenText(list));
                }
                sb.append(value);
                sb.append("</" + name + ">");
            }
        }

        return sb.toString();
    }

    /**
     * 将请求参数转换为xml格式的string
     * 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.
     * 
     */
    @SuppressWarnings("all")
    public static String getRequestXml(final SortedMap<String, String> parameters) {
        StringBuffer sb = new StringBuffer();
        sb.append("<xml>");
        Set es = parameters.entrySet();
        Iterator it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            String v = (String) entry.getValue();
            if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
                sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
            } else {
                sb.append("<" + k + ">" + v + "</" + k + ">");
            }
        }
        sb.append("</xml>");
        return sb.toString();
    }

    /**
     * main
     */
    public static void main(final String[] arg) {
        SortedMap<String, String> sm = new TreeMap<String, String>();
        sm.put("SUCCESS", "OK");
        String ss = getRequestXml(sm);
        System.out.println(ss);
    }

}

 

© 著作权归作者所有

苏别v
粉丝 5
博文 8
码字总数 6589
作品 0
海淀
后端工程师
私信 提问
JAXB Annotation初步使用

JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换...

秋风醉了
2014/07/02
0
0
如何成为一个合格的Java程序员

如何成为一个合格的Java程序员 1、语法:必须比较熟悉,在写代码的时候IDE 的编辑器对某一行报错应该能够根据报错信息知道是 什么样的语法错误并且知道任何修正。 2、命令:必须熟悉JDK 带的...

maskleo
2015/04/20
0
0
Apache commons (Java常用工具包)简介

Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html BeanUtils Commons-BeanUtils 提供对 Java...

Coder小兵
2012/02/04
0
0
Apache CXF 整合 Map

在进行编码前有必要对一些基本的认识进行介绍,以便后面的讲解。 1、JAXB: JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这...

yaokangjun
2014/08/21
0
1
熟练的Java程序员应该掌握的技术

1、语法:Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正。 2、命令:必须熟悉JDK带的一些常用命令及其常...

wersdffg
2015/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重定向与转发,绝对路径

/** 1. 请求和响应 * 请求:客户端向服务器 * 类型:HttpServletRequest request * 定义:代表了客户端向服务器发送的请求报文,该对象由服务器(web容器|Servlet容器)...

architect刘源源
19分钟前
1
0
node后端使用jwt实现跨域认证--生成token、验证token是否无效和过期

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案 引入jwt var jwt = require('jsonwebtoken'); 生成token 在登录时,如果用户名和密码正确,则使用jwt生成token,返回给前端 le...

祖达
32分钟前
1
0
Oauth2 单点登陆

少年已不再年少
38分钟前
2
0
怎么做到有效沟通?

关于有效沟通,用下面两个场景来讲述一下: 情景1: 开发A:tickets库连不上,帮忙看一下。 运维:tikets库?国内、国外?什么环境?(测试、线上) 开发A:国外、测试 运维:在哪连接的?(...

阿dai学长
40分钟前
1
0
idea如何部署tomcat

最近在学习使用idea,有很多不习惯,这里记录一下tomcat的部署。 首先需要借助工具栏,需要在view(视图)中勾选工具栏和工具按钮,如下图: 然后点击选择[运行/调试]配置的按钮,如图所示: ...

我叫小糖主
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部