Android电视TV开发之数据解析 Soap数据解析初体验

227 阅读1分钟

查阅了大量资料 反复调试 提取最简单Soap解析方法 本着去伪存真的目的,记录一下; 解析用到第三方工具dom4j,网络上都是架包,几乎没有引用连接(百度,必应,Google)。

这里有一个小插曲,所有gitbub 上公开第三方库或者项目,可以在jitpack.io/直接找到; 例如:jitpack.io/#dom4j/dom4… 就可以搜索最新引用方式和版本;

implementation 'com.github.dom4j:dom4j:version-2.1.3'

String content = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand=\"1\">Soap解析数据测试</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body><cwmp:SetParameterValuesResponse><Status>0</Status></cwmp:SetParameterValuesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>";
Map<String, String>   data = new  SoapXmlUtil().ParseSoapXmlHeader(content);
    for (String value : data.values()) {
        Log.e(Tag,"Value = "+value);
    }

这里打印出来的log日志value 就是 “Soap解析数据测试” 这里就大功告成; SoapXmlUtil 另外说下Soap有"Body"和“Header”解析对应使用调用相关方法就行; 下面是封装的类库代码:

/**
 * Soap 解析工具
 */
public class SoapXmlUtil {
    public Map<String, String> map = new HashMap<String, String>();

    public Map<String, String> ParseSoapXml(String SoapXml) {
        try {
            Document document = DocumentHelper.parseText(SoapXml);
            Element elements = document.getRootElement();
            Iterator iterators = elements.elementIterator();
            // 获取根节点中的信息
            while (iterators.hasNext()) {
                Element element = (Element) iterators.next();
                String name = element.getName();
                // 一般Header节点中是空的
                if (name.equals("Body")) {
                    Iterator iterator = element.elementIterator();
                    this.ParseDom(iterator);
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return map;
    }

    public Map<String, String> ParseSoapXmlHeader(String SoapXml) {
        try {
            Document document = DocumentHelper.parseText(SoapXml);
            Element elements = document.getRootElement();
            Iterator iterators = elements.elementIterator();
            // 获取根节点中的信息
            while (iterators.hasNext()) {
                Element element = (Element) iterators.next();
                String name = element.getName();
                // 一般Header节点中是空的
                if (name.equals("Header")) {
                    Iterator iterator = element.elementIterator();
                    this.ParseDom(iterator);
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return map;
    }
    // 获取具体key-value
    private void ParseDom(Iterator iterators) {
        while (iterators.hasNext()) {
            Element element = (Element) iterators.next();
            Iterator iterator = element.elementIterator();
            if (iterator.hasNext()) {
                this.ParseDom(iterator);
            } else {
                String key = element.getName();
                String value = element.getStringValue();
                map.put(key, value);
            }
        }
    }
}