解析xml节点属性及子节点内容
xml样例
<microNearlyThreeYearsOverdueInfo subReportType="13204" subReportTypeCost="96040" treatResult="子报告查询状态,1:查得,2:未查得,3:其他原因未查得" treatErrorCode="treatResult=3时的错误代码,详见数据字典,treatResult!=3时,该属性不存在" errorMessage="treatResult=3时的错误描述信息,treatResult!=3时,该属性的值为空">
<!--treatresult为2、3时没有以下节点-->
<!--逾期汇总信息 0..1-->
<stat>
<overdueAmount>逾期本金,单位:以贷款基本信息的币种为准</overdueAmount>
<overdueDays>逾期天数区间,取值区间:逾期1天(含)以上</overdueDays>
<overdueCount>逾期天数区间的总笔数</overdueCount>
</stat>
</microNearlyThreeYearsOverdueInfo>
定义实体并解析
父类:CommonField
public class CommonField extends BasePojo {
private String treatResult;//子报告查询状态,1:查得,2:未查得,3:其他原因未查得
private String errorMessage;//treatResult=3时的错误描述信息,treatResult!=3时,该属性的值为空
子类:MicroNearlyThreeYearsOverdueInfo
public class MicroNearlyThreeYearsOverdueInfo extends CommonField implements Serializable {
private String overdueAmount;//逾期本金,单位:以贷款基本信息的币种为准
private String overdueDays;//逾期天数区间,取值区间:逾期1-6天,逾期7-29天,逾期30-59天,逾期60-89天,逾期90天(含)以上
private Integer overdueCount;//逾期天数区间的笔数
一,解析节点属性
Element microNearlyThreeYearsOverdueInfoElement = cisReport.element("microNearlyThreeYearsOverdueInfo");
List<Attribute> microNearlyThreeYearsOverdueInfoAttributeList = microNearlyThreeYearsOverdueInfoElement
.attributes();
//(1)把属性数据复制给实体 先转map
MicroNearlyThreeYearsOverdueInfo mtyoi = getMicroNearlyThreeYearsOverdueInfoNode(microNearlyThreeYearsOverdueInfoElement,
microNearlyThreeYearsOverdueInfoAttributeList);
re.setMicroNearlyThreeYearsOverdueInfo(mtyoi);
//(1)把属性数据复制给实体 先转map
private MicroNearlyThreeYearsOverdueInfo getMicroNearlyThreeYearsOverdueInfoNode(Element element,
List<Attribute> attributeList) throws Exception {
try {
// 获取网贷逾期信息的全部属性
Map<String, String> attributeMap = attributeList.stream()
.collect(Collectors.toMap(Attribute::getName, Attribute::getValue));
//(2)属性赋值给父类
MicroNearlyThreeYearsOverdueInfo obj = (MicroNearlyThreeYearsOverdueInfo) CommonUtils.setValueOfSuperClass(MicroNearlyThreeYearsOverdueInfo.class,
attributeMap);
if ("1".equals(obj.getTreatResult())) {
//(3)解析子节点-逾期汇总信息
getMicroNearlyThreeYearsOverDueTotalInfo(element, obj);
// 详细信息
getMicroNearlyThreeYearsOverdueSummaryInfo(element, obj);
} return obj;
} catch (Exception e) {
logger.error("getMicroNearlyThreeYearsOverdueInfoNode@PyserviceImpl_Exception", e);
throw e;
} }
(2)属性赋值给父类
/**
* @param clazz, attributeMap
* @return java.lang.Object
* @Description: 通过反射给目标对象的父类设置属性
* @date 2017/8/30 9:42
*/
public static Object setValueOfSuperClass(Class<?> clazz, Map<String, String> attributeMap) throws Exception {
try {
Object object = Class.forName(clazz.getName()).newInstance();
Class<?> obj = object.getClass().getSuperclass();
Field[] fields = obj.getDeclaredFields();
setValue(object, attributeMap, fields);
return object;
} catch (Exception e) {
logger.info(e.getMessage());
throw e;
}
}
二,解析子节点内容
上://(3)解析子节点-逾期汇总信息
private MicroNearlyThreeYearsOverdueInfo getMicroNearlyThreeYearsOverDueTotalInfo(Element element,
MicroNearlyThreeYearsOverdueInfo obj) {
Element eStat = element.element("stat");
if (eStat != null) {
List<Element> statlist = eStat.elements();
//解析节点内容
//方式一,遍历List<Element>,调用e.elementText()
if (!ListUtil.isEmpty(statlist)) {
for (Element e : statlist) {
String overdueAmount = e.elementText("overdueAmount");
String overdueDays = e.elementText("overdueDays");
String overdueCount = e.elementText("overdueCount");
}
}
//方式二,List<Element>转化为map<节点名称,节点值>
if (!ListUtil.isEmpty(statlist)) {
//(4)List<Element>转化为map<节点名称,节点值>
Map<String, String> resultMap = XmlUtil.getResultMap(statlist);
obj.setOverdueAmount(resultMap.get("overdueAmount"));
obj.setOverdueDays(resultMap.get("overdueDays"));
obj.setOverdueCount(Integer.valueOf(resultMap.get("overdueCount")));
} }
return obj;
}
/**
* 将元素节点转换成map
*/
(4)List<Element>转化为map<节点名称,节点值>
public static Map<String, String> getResultMap(List<Element> items) {
Map<String, String> map = new HashMap<>(32);
for (Element e : items) {
if (StringUtils.isNotEmpty(e.getData().toString())) {
map.put(e.getName(), e.getData().toString());
}
}
return map;
}
解析xml节点属性及子节点内容的更多相关文章
- dom4j解析xml获取所有的子节点并放入map中
dom4j递归解析所有子节点 //解析返回的xml字符串,生成document对象 Document document = DocumentHelper.parseText(resultXml); / ...
- [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)
Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...
- 删除TreeView节点以及其子节点
//1.删除TreeView节点以及其子节点procedure TForm2.Button1Click(Sender: TObject);var TreeNode:TTreeNode;begin i ...
- zTree中父节点禁用,子节点可以用
参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...
- easyui tree扩展tree方法获取目标节点的一级子节点
Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...
- JS编程练习:将目标节点内部的子节点逆序
将目标节点内部的子节点逆序 1 <body> 2 <div> 3 <p></p> 4 <span></span> 5 <e ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- XML SelectSingleNode的使用 根据节点属性获取该节点
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...
- xml去除指定节点,保留子节点操作
现有xml文件: <?xml version="1.0" encoding="utf-8" ?> <ShiftConfig xmlns:xsi ...
随机推荐
- HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成数据的增删改查
转:http://www.th7.cn/db/nosql/201510/135382.shtml 1. HDFS的文件append功能 早期版本的HDFS不支持任何的文件更新操作,一旦一个文件创建.写 ...
- Storm完整例子
import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import ...
- 20145216史婧瑶《Java程序设计》第一周学习总结
20145216 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 Java平台概论 1.1 Java不只是语言 1.Java三大平台:Java SE.Java EE与Java ...
- 20145321 《Java程序设计》第5周学习总结
20145321 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.Try.catch:Java中所有错误都会被打包为对象,通过try和catch语法可以对代表错误的对象做 ...
- ubuntu下源码安装wget
1.背景 ubuntu18.04 64bit 2.安装方法如下: 2.1.获取源码 curl -o wget-1.20.tar.gz ftp://ftp.gnu.org/gnu/wget/wget-1 ...
- SaltStack配置salt-api第十二篇
介绍 SaltStack官方提供有REST API格式的 salt-api项目,将使Salt与第三方系统集成变得尤为简单.本文讲带你了解如何安装配置Salt-API, 如何利用Salt-API获取想要 ...
- Dijkstra+优先队列
/* Dijkstra的算法思想: 在所有没有访问过的结点中选出dis(s,x)值最小的x 对从x出发的所有边(x,y),更新 dis(s,y)=min(dis(s,y),dis(s,x)+dis(x ...
- spring boot将jar包转换成war包发布
spring boot将jar包转换成war包发布步骤 将<packaging>jar</packaging>修改为<packaging>war</packa ...
- 百度云如何免费扩容至2055G?
百度云如何免费扩容至2055G? 上篇说到整一个新的百度账号,那么5G的百度云内存肯定满足不了我们收集癖的需求.那么就来了解一下怎么扩容吧. 主要是在手机端实现的 用这个新的百度账号在手机APP上登录 ...
- 【Network architecture】Rethinking the Inception Architecture for Computer Vision(inception-v3)论文解析
目录 0. paper link 1. Overview 2. Four General Design Principles 3. Factorizing Convolutions with Larg ...