SAX解析xml字符串

最近需要接入微信支付的返回参数,将其入库,微信的返回参数是xml格式的,这里采用sax进行数据解析

package com.xx.utils;

import java.io.StringReader;
import java.util.List;

import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;

/**
 * SAX解析xml字符串
 * 依赖:
 *      <dependency>
 *         <groupId>dom4j</groupId>
 *         <artifactId>dom4j</artifactId>
 *         <version>1.6.1</version>
 *      </dependency>
 * 需求:解析微信支付返回数据入库
 * 微信支付返回参数格式:
 * <h1>
 *     <p1></p1>
 *     <p2></p2>
 *     <p3></p4>
 * </h1>
 */
public class xmlUtil {
    public static void main(String[] args) throws DocumentException {
        String xml = "<xml><appid><![CDATA[wx2421b1c4370ec43b]]></appid><attach><![CDATA[支付测试]]></attach><bank_type><![CDATA[CFT]]></bank_type><fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str> <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid> <out_trade_no><![CDATA[1409811653]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign> <sub_mch_id><![CDATA[10000100]]></sub_mch_id> <time_end><![CDATA[20140903131540]]></time_end> <total_fee>1</total_fee> <coupon_fee_0><![CDATA[10]]></coupon_fee_0> <coupon_count><![CDATA[1]]></coupon_count> <coupon_type><![CDATA[CASH]]></coupon_type> <coupon_id><![CDATA[10000]]></coupon_id> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id> </xml>";
//        String  xml = "<h1><p><span>1</span></p><p><span>2</span></p></h1>";
        InputSource in = new InputSource(new StringReader(xml));
        in.setEncoding("UTF-8");
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);// 如果是xml文件这里直接写xml文件的绝对路径
        Element root = document.getRootElement();// 获取根节点
        List<Element> elements = root.elements();// 查找子节点
        for (Element element : elements) {// 读取到第一个子节点
            System.out.println(element.getName() + ":" + element.getTextTrim()); // 如果是<h1><p>1</p><p1>2</p1></h1>这样的格式,这样就可以读取到数据了
//            for(Element ele : (List<Element>)element.elements()){// 读取到第二个子节点
//                System.out.println(ele.getName() + ":" + ele.getTextTrim());// 如果是<h1><p><span>1</span></p><p><span>2</span></p></h1>这样的数据就需要继续向下读取,以此类推
//            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值