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节点属性及子节点内容的更多相关文章

  1. dom4j解析xml获取所有的子节点并放入map中

    dom4j递归解析所有子节点 //解析返回的xml字符串,生成document对象 Document document = DocumentHelper.parseText(resultXml); / ...

  2. [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)

    Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...

  3. 删除TreeView节点以及其子节点

    //1.删除TreeView节点以及其子节点procedure TForm2.Button1Click(Sender: TObject);var TreeNode:TTreeNode;begin  i ...

  4. zTree中父节点禁用,子节点可以用

    参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...

  5. easyui tree扩展tree方法获取目标节点的一级子节点

    Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...

  6. JS编程练习:将目标节点内部的子节点逆序

    将目标节点内部的子节点逆序 1 <body> 2 <div> 3 <p></p> 4 <span></span> 5 <e ...

  7. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  8. XML SelectSingleNode的使用 根据节点属性获取该节点

    unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...

  9. xml去除指定节点,保留子节点操作

    现有xml文件: <?xml version="1.0" encoding="utf-8" ?> <ShiftConfig xmlns:xsi ...

随机推荐

  1. NRF24L01——工作原理解读

    源: NRF24L01——工作原理解读

  2. WCF的异步调用

    1.服务契约 namespace Contracts { [ServiceContract] public interface ICalculator { [OperationContract] do ...

  3. Jquery编历数组

    <html> <head> <title>编历</title> <script type="text/javascript"& ...

  4. logstash运输器以及kibana的更多操作

    为了达到不会因为ELK中的某一项组件因为故障而导致整个ELK工作出问题,于是 将logstash收集到的数据存入到消息队列中如redis,rabbitMQ,activeMQ或者kafka,这里以red ...

  5. 20145335《java程序设计》第10周学习总结

    20145335郝昊 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的 ...

  6. 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法(好像XP不支持这个函数)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #pragma once   #ifndef WM_COPYGLOBALD ...

  7. sqlite的Top筛选

    select [CollectDateTime] as '时间',[Channel_34] as '通道34',[Channel_54] as '通道54' from [DataTable] wher ...

  8. 爬虫之Handler处理器 和 自定义Opener

    Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ...

  9. ConcurrentHashMap实现线程安全的原理

    并发环境下为什么使用ConcurrentHashMap 1. HashMap在高并发的环境下,执行put操作会导致HashMap的Entry链表形成环形数据结构,从而导致Entry的next节点始终不 ...

  10. detectron——test 错误集锦

    一.测试错误,运行如下代码 python2 tools/test_net.py --cfg experiments/e2e_faster_rcnn_resnet--FPN_pascal2007.yam ...