xml解析工具类

  引入pom
 <!-- jdom --> 
   <dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.5</version>
</dependency> 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

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

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


    /**
     * 解析String类型的xml流对象InputStream
     * 解析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();
                m.put(k, v);
            } else {
                getChildrenMap(children,m);
            }
        }

        // 关闭流
        in.close();

        return m;
    }

    /**
     * 获取子结点的map
     */
    @SuppressWarnings("all")
    private static Map<String, String> getChildrenMap(final List children,Map<String, String> map) {
        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();
                if (!list.isEmpty()) {
                    getChildrenMap(list,map);
                }
                map.put(name,value);
            }
        }
        return map;
    }

    /**
     * 将请求参数转换为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();
    }

    /**
     * 解析String类型的xml流对象InputStream
     * 解析xml,返回所有键值对。多组的情况
     */
    @SuppressWarnings("all")
    public static  List<Map<String, String>> doXMLParseByList(final String strxml) throws JDOMException, IOException {
        if (null == strxml || "".equals(strxml)) {
            return null;
        }

        List<Map<String, String>> listMap = new ArrayList<>();
        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();
        Map<String, String> map = null;
        while (it.hasNext()) {
            Element e = (Element) it.next();
            String k = e.getName();
            String v = "";
            List children = e.getChildren();
            if (children.isEmpty()) {
                v = e.getTextNormalize();
                map =new HashMap<String, String>();
                map.put(k, v);
                listMap.add(map);
            } else {
                getChildrenListMap(children,listMap);
            }
        }
        // 关闭流
        in.close();
        return listMap;
    }

    /**
     * 获取子结点的map
     */
    @SuppressWarnings("all")
    private static void getChildrenListMap(final List children,List<Map<String, String>> listMap) {
        if (!children.isEmpty()) {
            Iterator it = children.iterator();
            Map<String, String> childMap = new HashMap<String, String>();
            while (it.hasNext()) {
                Element e = (Element) it.next();
                String name = e.getName();
                String value = e.getTextNormalize();
                List list = e.getChildren();
                if (!list.isEmpty()) {
                    getChildrenListMap(list,listMap);
                }
                childMap.put(name,value);
            }
            listMap.add(childMap);
        }
    }
    /**
     * main
     */
    public static void main(final String[] arg) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><sms><mt><status>0</status><account>9522</account></mt></sms>";
        String reportXml ="<?xml version=\"1.0\" encoding=\"utf-8\"?> \n" +
                "<sms> \n" +
                " <rpt> \n" +
                " <mobile>13764736306</mobile> \n" +
                " <msgid>407349913f2e4f578a6c26c4542c39ce</msgid> \n" +
                " <status>DELIVRD1</status> \n" +
                " <time>2016-06-08 17:39:38</time> \n" +
                " <extno/> \n" +
                " </rpt> \n" +
                " <rpt> \n" +
                " <mobile>18017462196</mobile> \n" +
                " <msgid>6042d26b594b430aa6193da0fe39547e</msgid> \n" +
                " <status>DELIVRD2</status> \n" +
                " <time>2016-06-08 17:39:41</time> \n" +
                " <extno/> \n" +
                " </rpt> \n" +
                "</sms> ";
        try {
            List<Map<String, String>> mapList = doXMLParseByList(reportXml);
            System.out.println(mapList.size());
            for ( Map<String, String> map:mapList){
                System.out.println(map.get("mobile"));
                System.out.println(map.get("status"));
            }
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析的XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值