在进行XML解析时,往往会遇到某个结点下有多组同名子节点数据的情况,如:
<xml>
……
<gfrs>
<gfr>
<gfrxm>66</gfrxm>
<zjhm>12345</zjhm>
</gfr>
<gfr>
<gfrxm>67</gfrxm>
<zjhm>1209812</zjhm>
</gfr>
</gfrs>
……
</xml>
具体解析代码如下:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author : chenfan
* @className : TestXml
* @date : Created in 2022/5/12 16:26
* @description :
*/
public class TestXml {
public static List<Map> xml2Maps(Element root) {
List<Map> list = new ArrayList<>();
try {
List<Element> gftElements = root.elements();
for(Element gfrElement : gftElements){
Map<String, Object> map = new HashMap<>();
List<Element> elements = gfrElement.elements();
for(Element element : elements){
map.put(element.getName(), element.getStringValue());
}
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static Map xml2Map(String xmlStr){
Map<String, Object> map = new HashMap<>();
try {
Document doc = DocumentHelper.parseText(xmlStr);
Element root = doc.getRootElement();
Element body = root.element("body");
//获取body下所有元素
List<Element> bodyElements = body.elements();
for(Element element : bodyElements){
if("gfrs".equals(element.getName())){
//对gfrs单独解析
map.put(element.getName(), xml2Maps(element));
}else{
map.put(element.getName(), element.getStringValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) {
String xml = "<xml>\n" +
"\t<header>\n" +
"\t\t<status>1</status>\n" +
"\t\t<message>数据信息处理成功!</message>\n" +
"\t</header>\n" +
"\t<body>\n" +
"\t\t<jgbh>20210019</jgbh>\n" +
"\t\t<czsj>2021-06-08 15:06:22</czsj>\n" +
"\t\t<gfrs>\n" +
"\t\t\t<gfr>\n" +
"\t\t\t\t<gfrxm>66</gfrxm>\n" +
"\t\t\t\t<zjhm>12345</zjhm>\n" +
"\t\t\t</gfr>\n" +
"\t\t\t<gfr>\n" +
"\t\t\t\t<gfrxm>67</gfrxm>\n" +
"\t\t\t\t<zjhm>1209812</zjhm>\n" +
"\t\t\t</gfr>\n" +
"\t\t</gfrs>\n" +
"\t\t<htze>80000</htze>\n" +
"\t</body>\n" +
"</xml>";
Map<String, Object> map = new HashMap<>();
map = xml2Map(xml);
List<Map> list = (List)map.get("gfrs");
System.out.println(list.size());
for(Map tmpMap : list){
// tmpMap.get("gfrxm");
// tmpMap.get("zjhm");
System.out.println(xml);
System.out.println("gfrxm:"+tmpMap.get("gfrxm"));
System.out.println("zjhm:"+tmpMap.get("zjhm"));
}
}
}
运行结果:
"C:\Program Files (x86)\Java\jdk1.8.0_74\bin\java.exe"...
<xml>
<header>
<status>1</status>
<message>数据信息处理成功!</message>
</header>
<body>
<jgbh>20210019</jgbh>
<czsj>2021-06-08 15:06:22</czsj>
<gfrs>
<gfr>
<gfrxm>66</gfrxm>
<zjhm>12345</zjhm>
</gfr>
<gfr>
<gfrxm>67</gfrxm>
<zjhm>1209812</zjhm>
</gfr>
</gfrs>
<htze>80000</htze>
</body>
</xml>
2
gfrxm:66
zjhm:12345
gfrxm:67
zjhm:1209812
Process finished with exit code 0