SOAPXML报⽂解析
从根节点向叶⼦节点递归,到叶⼦结点就获取它的值,不然就继续递归。
值得注意的是,这个Map对象⼀定要定义在外⾯,定义在getcode⽅法⾥⾯毫⽆疑问不会得到我们最终想要的结果,原因读者⾃⾏思考。提
⽰:这是⼀个递归的过程。
这个对于xml解析只对应xml有⼀个对象时,对于多个对象,后⾯我进⾏了改进。
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class ParseXml {
public Map<String,Object>map = new HashMap<String,Object>();
public  Map parse(String soap) throws DocumentException{
Document doc = DocumentHelper.parseText(soap);//报⽂转成doc对象
Element root = RootElement();//获取根元素,准备递归解析这个XML树
getCode(root);
return map;
}
public  void getCode(Element root){
if(root.elements()!=null){
使用dom4j解析xml文件
List<Element>list = root.elements();//如果当前跟节点有⼦节点,到⼦节点
for(Element e:list){//遍历每个节点
if(e.elements().size()>0){
getCode(e);//当前节点不为空的话,递归遍历⼦节点;
}
if(e.elements().size()==0){
map.Name(), e.getTextTrim());
}//如果为叶⼦节点,那么直接把名字和值放⼊map
}
}
}
public static void main(String[]args) throws DocumentException{
String soap = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soap:Envelope xmlns:xsd=\"/2001/XMLSchema\" xmlns:soapenc=\"schem        //初始化报⽂,调⽤parse⽅法,获得结果map,然后按照需求取得字段,或者转化为其他格式
Map map = new ParseXml().parse(soap);
//获得字段s:SourceSysId的值;
String id = ("SourceSysId").toString();
System.out.println("id=="+id);
}
}
对于xml⽂件中存在多个对象:
public  List<Map<String,Object>> mapList = new ArrayList<>();
public  List<Map<String,Object>> parse(String soap) throws DocumentException{        Document doc = DocumentHelper.parseText(soap);//报⽂转成doc对象
Element root = RootElement();//获取根元素,准备递归解析这个XML树        getCode(root);
return mapList;
}
public  void getCode(Element root){
boolean flag =false;
Map<String, Object> map1 = new HashMap<String, Object>();
if (root.elements() != null) {
List<Element> list = root.elements();//如果当前跟节点有⼦节点,到⼦节点                for (Element e : list) {//遍历每个节点
if (e.elements().size() > 0) {
getCode(e);//当前节点不为空的话,递归遍历⼦节点;
}
if (e.elements().size() == 0) {
flag = true;
map1.Name(), e.getTextTrim());
}//如果为叶⼦节点,那么直接把名字和值放⼊map
}
}
if (flag) {
mapList.add(map1);
flag = false;
}
}
public static void main(String[] args) throws Exception {
String soapx = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap:Envelope xmlns:xsi=\"/2001/XMLSchema-instance\" xmlns:xsd=\"/2001/XMLSchema\" xmlns:soap=\"s                "  <soap:Body>" +
"    <GetEndWaterResponse xmlns=\"itwater.aql/MeterWaterService/\">" +
"      <GetEndWaterResult>" +
"        <MeterWater>" +
"          <UserCode>string1</UserCode>" +
"          <MeterCode>string1</MeterCode>" +
"          <EndWater>int1</EndWater>" +
"          <InstAddr>string1</InstAddr>" +
"          <MeterSize>int1</MeterSize>" +
"          <StateDesc>string1</StateDesc>" +
"          <LastReadDate>dateTime1</LastReadDate>" +
"          <CollectorCode>string1</CollectorCode>" +
"          <ConcentratorCode>string1</ConcentratorCode>" +
"        </MeterWater>" +
"        <MeterWater>" +
"          <UserCode>string2</UserCode>" +
"          <MeterCode>string2</MeterCode>" +
"          <EndWater>int2</EndWater>" +
"          <InstAddr>string2</InstAddr>" +
"          <MeterSize>int2</MeterSize>" +
"          <StateDesc>string2</StateDesc>" +
"          <LastReadDate>dateTime2</LastReadDate>" +
"          <CollectorCode>string2</CollectorCode>" +
"          <ConcentratorCode>string2</ConcentratorCode>" +
"        </MeterWater>" +
"      </GetEndWaterResult>" +
"    </GetEndWaterResponse>" +
"  </soap:Body>" +
"</soap:Envelope>";
List<WaterMeter> waterMeters = new ArrayList<>();
List<Map<String,Object>> mapList = new waterService().parse(soapx );
System.out.println("============"+mapList);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。