解析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 ...
随机推荐
- Android执行shell命令 top ps
Android执行shell命令 一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/ ...
- 【前端】强大的javascript原生选择器querySelector 和 querySelectorAll
querySelector 和 querySelectorAll 在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 D ...
- System.IO命名空间下常用的类
System.IO System.IO.Directory 目录 System.IO.Path 文件路径(包含目录和文件名) System.IO.FileInfo 提供创建.复制.删除.移动和打开文件 ...
- Spring boot 解决 hibernate no session异常
启动类中加入 @Beanpublic OpenEntityManagerInViewFilter openEntityManagerInViewFilter(){ return new OpenEnt ...
- 解题报告:hdu 1276 士兵队列训练问题 - 简单题
Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行 ...
- 分页式存储管理方式AND请求分页式存储管理
先说下什么是页(页面):就是将用户的程序的的地址空间分成固定大小的区域,称为”页“,或者”页面“ 之后将这些页离散的放进内存中,这样解决了内存的碎片问题 记得老师上课说了下这两个概念不能混,现在区分下 ...
- 日期插件My97DatePicker
因为项目中需要选中日期,所以就找到了My97DatePicker这个插件,用法非常的简单,但是因为各个公司的要求不同,我们公司使用js拼代码,然后渲染到页面上的,所以遇到了一点问题… 1.My97Da ...
- javascript深入浅出
第一章 数据类型 1,六种数据类型:原始类型(number,string,boolean,null,undefined) + object对象(Function Array Date) 2,隐式转换: ...
- python的os.urandom 的用途
Python中os.urandom(n)的作用 随机产生n个字节(0-255)的字符串,可以作为随机加密key使用~ >>> index = os.urandom(2) >&g ...
- python 函数、模块、包及import导入方法
https://www.cnblogs.com/lijunjiang2015/p/7812996.html