解析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 ...
随机推荐
- 超级强大的vim配置(vimplus)--续集
An automatic configuration program for vim 安装(github地址:https://github.com/chxuan/vimplus.git, 欢迎star ...
- [转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题
原文链接:关于Navicat和MYSQL字符集不统一出现的中文乱码问题 最近遇到一串关于MYSQL中文乱码的问题,问题背景是这样的: 在此之前,服务器上安装好MySQL之后就立马重新配置了字符集为ut ...
- U盘中了磁碟机病毒怎么办
问题: U盘在中毒了的电脑上使用后,里面的文件夹均消失了,这是因为里面的文件夹属性被改为隐藏属性.通过查看显示隐藏文件夹发现,所有隐藏了的文件夹的隐藏属性被锁定,无法通过鼠标右键查看文件夹属性的方法改 ...
- oracle导入时报错
之前在oracle数据库中新建了一个表空间和用户,在新建的用户下导入".dmp"文件是出现了这个错误. 解决方法: 使用管理员登陆进去,创建一个对应的表空间和用户,就OK了. (表 ...
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(二)
她不会流一滴眼泪,不会浪费自己的余生,在慢火煮炖的回忆的蛆肉汤中煎熬,不会把自己活活埋葬在四面墙壁之间,成日为自己缝制寿衣,尽管这是当地人乐见寡妇做的事情. 活到这把年纪,人还在的时候就已经腐烂一半了 ...
- 回到HTML〇
HTML(HyperText Markup Language),用来向浏览器标示文档的所有“内容”与“结构”. 抱着温故而知新的态度,在这里通过“回到HTML”系列文章,重新梳理一下HTML的相关知识 ...
- 解读:Hadoop Archive
hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode中占用150byte内存.如果存储大量的小文件,它们会吃掉NameNode节点的大量内存.MR案 ...
- [CF730J]Bottles
题目大意:每个瓶子有一定的容积,以及一定的水量,问最少几个瓶子装满所有水,在此基础上还要最小化移动水的体积 第一问用贪心直接求第二问转化成背包问题设dp[i][j]表示前i桶水总容积为j的最多水量,这 ...
- jquery 弹窗插件 layer 常见接口
源自:https://www.cnblogs.com/teamobaby/p/3556584.html 常见接口如下: 方法名 描述 $.layer({}) 核心接口,参数是一个对象,对象属性参见上述 ...
- js 日期 处理 加减时分秒
1.日期处理 var _d = new Date("2018/01/01 12:00:00"); _d = new Date(_d.valueOf() + 60 * 1000);/ ...