解析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 ...
随机推荐
- maven-surefire-plugin
本文参考自:https://www.cnblogs.com/qyf404/p/5013694.html surefire是maven里执行测试用例(包括testNG,Junit,pojo)的插件,他能 ...
- 20145329 《Java程序设计》第五周学习总结
20145329 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeE ...
- C++DFS方法全排列
前几天看纪磊的<啊哈!算法>一书,里面讲算法讲的特别通俗细致,真的是初中生都能读得懂的算法书(我大二才读:P).这段代码很适合初学算法的同学. #include<iostream&g ...
- linux 搭建Java环境
一.下载jdk/jre文件 下载链接 二.安装Java环境 1.解压文件到 /usr/java 目录 # tar zxvf jre-8u60-linux-x64.gz 2.配置环境变量 ...
- Why not inherit from List<T>?
问题: When planning out my programs, I often start with a chain of thought like so: A football team is ...
- .Net Core Linux部署之进程守护 Supervisor 安装配置
1.Supervisor 安装 //安装easy_install yum install python-setuptools //安装Supervisor easy_install superviso ...
- oracle 12c 报错 ora-03137 来自客户机的格式错误的TTC包被拒绝
昨天下午,实施报了一个oracle的报错ora-03137 说是数据库在11g时没有问题,升级到12c 时,就报错了. 本地调试,看到执行完sql后,报异常,如下: 把SqL在12c的数据库执行一下, ...
- static、final和finalize详解
一.static 修饰符 数据共享 成员变量(实例变量)和静态变量(类变量)的区别 两个变量的生命周期不同 成员变量随对象的创建而存在,随对象被回收而释放 静态变量随类的加载而存在,随类的消失而消失 ...
- Springboot依赖注入笔记
结合Autowired和Service注解 public interface IUser { void say(); } @Service public class Student implement ...
- Office.资料
1.JAVA+JS如何在HTML页面上显示WORD文档内容?ActiveX只能兼容IE不考虑!_百度知道.html(https://zhidao.baidu.com/question/74594982 ...