• 常见XML解析器


    xpp3

    官网

    http://www.extreme.indiana.edu/xgws/xsoap/xpp/

    简介

    Xml Pull Parser (in short XPP) is a streaming pull XML parser and should be used when there is a need to process quickly and efficiently all input elements (for example in SOAP processors).

    sax

    官网

    http://www.saxproject.org/

    简介

    SAX is the Simple API for XML, originally a Java-only API. SAX was the first widely adopted API for XML in Java, and is a “de facto” standard. The current version is SAX 2.0.1, and there are versions for several programming language environments other than Java.

    示例:解析微信post消息

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

    <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName> 
     <CreateTime>1348831860</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[this is a test]]></Content>
     <MsgId>1234567890123456</MsgId>
    </xml

    以下是java代码片段:

    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServletRequest;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    /**
     * 消息工具类
     * 
     */
    public class WeixinUtils {
    
        /**
         * 解析微信发来的请求(XML)
         * 
         * @param request
         * @return
         * @throws IOException
         */
        @SuppressWarnings("unchecked")
        public static Map<String, String> parseXml(HttpServletRequest request) throws IOException {
            ServletInputStream inputStream = request.getInputStream();
            SAXReader reader = new SAXReader();
            Map<String, String> resultMap = null;
            try {
                // 这个 doc 不会是 null
                Document document = reader.read(inputStream);
                Element rootElement = document.getRootElement();
                List<Element> eList = rootElement.elements();
                resultMap = new HashMap<String, String>();
                for (Element e : eList) {
                    resultMap.put(e.getName(), e.getText());
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) inputStream.close();
            }
            return resultMap;
        }
    }

    ps:

    想知道 void java.io.InputStream.close() throws IOException 怎么用吗?

    Ctrl+Shift+G 看看别人怎么用的吧

  • 相关阅读:
    Bean生命周期
    Bean的作用域
    神经网络训练中,傻傻分不清Epoch、Batch Size和迭代
    jQuery中选择器有哪几种
    数据库的事务机制
    多线程面试题
    HTTP请求报文和HTTP响应报文
    linux tomcat单机部署多应用
    flexbox预习
    作业
  • 原文地址:https://www.cnblogs.com/zno2/p/5688621.html
Copyright © 2020-2023  润新知