查阅了大量资料 反复调试 提取最简单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);
}
}
}
}