<?xml version="1.0" encoding="UTF-8"?> <data> <message> <status>0</status> <value>处理成功</value> </message> <policeCheckInfos> <policeCheckInfo name="李佳" id="325826128609280830"> <message> <status>0</status> <value>查询成功</value> </message> <name desc="姓名">李佳</name> <identitycard desc="身份证号">325826128609280830</identitycard> <compStatus desc="比对状态">3</compStatus> <compResult desc="比对结果">一致</compResult> <checkPhoto desc="照片">
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy I60GNSfOQyBVT5m/ee1QCFQ/c8UNzUj/AHDWhmQyIkY+6KdDbLN+8yR9KSA+YPmqbH+j4pEDREzH 5W/Omkyg9j9BT06VJ/yzpouxB50n/PD+VFWh0opDsf/Z</checkPhoto> <no desc="唯一标识" /> </policeCheckInfo> </policeCheckInfos> </data>
解析后放入HashMap中供调用
/* * 接口返回XML,得到HaspMap */ public static HashMap AnalyticXML(String xml){ HashMap<String,String> hm = new HashMap<String,String>(); try { // 读取并解析XML文档 // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read(new File("User.hbm.xml")); Document doc = DocumentHelper.parseText(xml); //加载XML字符串,得到Document对象 Element root=doc.getRootElement(); //获得根节点 Node processStatus = doc.selectSingleNode("/data/message/status"); String ProcessStatus = processStatus.getText(); //处理结果码 Node processValue = doc.selectSingleNode("/data/message/value"); String ProcessValue = processValue.getText(); //处理结果描述 hm.put("ProcessStatus", ProcessStatus); hm.put("ProcessValue", ProcessValue); if(ProcessStatus.equals("0")){ List policeCheckInfoList = (List)doc.selectNodes("/data/policeCheckInfos/policeCheckInfo"); for(int i=0;i<policeCheckInfoList.size();i++){ Element policeCheckInfo = (Element)policeCheckInfoList.get(i); String CheckName = policeCheckInfo.attributeValue("name"); //请求认证的人员姓名 String CheckId = policeCheckInfo.getTextTrim(); //请求认证的人员证件号 hm.put("CheckName", CheckName); hm.put("CheckId", CheckId); Element queryStatus = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/message/status"); String QueryStatus = queryStatus.getTextTrim(); //查询结果码 Element queryValue = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/message/value"); String QueryValue = queryValue.getTextTrim(); //查询结果描述 hm.put("QueryStatus", QueryStatus); hm.put("QueryValue", QueryValue); Element eleName = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/name"); String NameN = eleName.attributeValue("desc"); //认证反馈姓名描述 String NameV = eleName.getTextTrim(); //认证反馈姓名值 hm.put("NameN", NameN); hm.put("NameV", NameV); Element eleIdentityCard = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/identitycard"); String IdentityCardN = eleIdentityCard.attributeValue("desc"); //认证反馈身份证号描述 String IdentityCardV = eleIdentityCard.getTextTrim(); //认证反馈身份证号值 hm.put("IdentityCardN", IdentityCardN); hm.put("IdentityCardV", IdentityCardV); Element eleCompStatus = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/compStatus"); String CompStatusN = eleCompStatus.attributeValue("desc"); //认证反馈比对状态描述 String CompStatusV = eleCompStatus.getTextTrim(); //认证反馈比对状态号值 hm.put("CompStatusN", CompStatusN); hm.put("CompStatusV", CompStatusV); Element eleCompResult = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/compResult"); String CompResultN = eleCompResult.attributeValue("desc"); //认证反馈比对结果描述 String CompResultV = eleCompResult.getTextTrim(); //认证反馈比对结果值 hm.put("CompResultN", CompResultN); hm.put("CompResultV", CompResultV); String CheckPhotoN = ""; String CheckPhotoV = ""; if(CompStatusV.equals("3")){ Element eleCheckPhoto = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/checkPhoto"); CheckPhotoN = eleCheckPhoto.attributeValue("desc"); //认证反馈照片描述 CheckPhotoV = eleCheckPhoto.getTextTrim(); //认证反馈照片值 hm.put("CheckPhotoN", CheckPhotoN); hm.put("CheckPhotoV", CheckPhotoV); } Element eleNo = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/no"); String NoN = eleNo.attributeValue("desc"); //认证反馈唯一标识描述 String NoV = eleNo.getTextTrim(); //认证反馈唯一标识值 hm.put("NoN", NoN); hm.put("NoV", NoV); } }else{ hm.put("CheckName", ""); hm.put("CheckId", ""); hm.put("QueryStatus", ""); hm.put("QueryValue", ""); hm.put("NameN", ""); hm.put("NameV", ""); hm.put("IdentityCardN", ""); hm.put("IdentityCardV", ""); hm.put("CompStatusN", ""); hm.put("CompStatusV", ""); hm.put("CompResultN", ""); hm.put("CompResultV", ""); hm.put("CheckPhotoN", ""); hm.put("CheckPhotoV", ""); hm.put("NoN", ""); hm.put("NoV", ""); } } catch (DocumentException e) { e.printStackTrace(); } return hm; }
小结:
1).获取 doc
Node processStatus = doc.selectSingleNode("/data/message/status");
Element eleName = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/name");
获得 doc 后,即可用 selectSingleNode 方法加层次路径获取 Node 或 Element;
2).获得 属性值和参数值
String CheckName = policeCheckInfo.attributeValue("name");
获得了 Node 或 Element 后,可使用 attributeValue 方法获得属性值;
String CheckId = policeCheckInfo.getTextTrim();
获得了 Node 或 Element 后,可使用 getTextTrim 方法获得参数值;
3).当内部有多组参数时,借助List,使用 selectNodes 方法
List policeCheckInfoList = (List)doc.selectNodes("/data/policeCheckInfos/policeCheckInfo");
for(int i=0;i<policeCheckInfoList.size();i++){
Element policeCheckInfo = (Element)policeCheckInfoList.get(i); //获取此层次的属性值
Element queryStatus = (Element)doc.selectSingleNode("/data/policeCheckInfos/policeCheckInfo/message/status");//
}
与获取子节点寻找父节点的方法相比,上述方法直观简便。我觉得更好用。