洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
1477
2022-12-05
Dom4j解析xml复杂多节点报文方式
目录Dom4j解析xml复杂多节点报文XML的解析方式分为四种本文介绍的是DOM4J方式解析主要核心代码如下dom4j解析多层xml
Dom4j解析xml复杂多节点报文
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。
XML的解析方式分为四种
1、DOM解析
2、SAX解析
3、JDOM解析
4、DOM4J解析
其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
本文介绍的是DOM4J方式解析
依赖jar包:
xml报文如下:
主要核心代码如下
String saveFile 为本地保存xml报文的路径。
AccountInfoEntityResp 为解析xml后封装的obj实体对象。
/**
* 解析xml文件并
*/
public String Dom4jGetXML(String saveFile){
//返回的Entity对象
String xmlContents = new String();
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
try {
// Resource resource = new ClassPathResource("accountInfo/"+accountDate+".xml");
Resource resource = new ClassPathResource(saveFile);
File file = null;
try{
file = resource.getFile();
}catch (Exception e){
//抛出异常
}
// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
Document document = reader.read(file);
// 通过document对象获取根节点bookstore
Element rootElement = document.getRootElement();
//document转换为String字符串
xmlContents = document.asXML();
//解析xml文件并转换为obj
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return xmlContents;
}
/**
* 解析对账文件xml,转换为obj对象返回前段
* @Descriptions: 循环遍历所有子节点,保存每个节点的值
* @Return: AccountInfoEntity
*/
public AccountInfoEntityResp getNodes(Element node){
AccountInfoEntityResp accountInfoEntityResp = new AccountInfoEntityResp();
List
//获得指定节点下面的子节点,首先要知道自己要操作的节点。
Element SttlCntNbElem = node.element("SttlCntNb");
//获取SttlCntNb
String SttlCntNb = SttlCntNbElem.getTextTrim();
//获取DebitCntAmt
Element DebitCntAmtElem = node.element("DebitCntAmt");
String DebitCntAmt = DebitCntAmtElem.getTextTrim();
//获取CreditCntAmt
Element CreditCntAmtElem = node.element("CreditCntAmt");
String CreditCntAmt = CreditCntAmtElem.getTextTrim();
accountInfoEntityResp.setSttlCntNb(Integer.valueOf(SttlCntNb));
BigDecimal CreditCntAmtVal = null;
if(CreditCntAmt != null && !CreditCntAmt.isEmpty()){
CreditCntAmtVal = new BigDecimal(CreditCntAmt.replace("CNY", ""));
}
accountInfoEntityResp.setCreditCntAmt(CreditCntAmtVal);
BigDecimal DebitCntAmtval = null;
if(DebitCntAmt != null && !DebitCntAmt.isEmpty()){
DebitCntAmtval = new BigDecimal(DebitCntAmt.replace("CNY", ""));
}
accountInfoEntityResp.setDebitCntAmt(DebitCntAmtval);
//获取SttlList
Element SttlListEle = node.element("SttlList");
//获取SttlInf
Element SttlInfEle = SttlListEle.element("SttlInf");
List
//遍历SttlInfList节点
String SttlReptFlg = "";
Integer SttlDCFlg = null;
BigDecimal SttlAmt = null;
for(Element e : SttlInfList){
List
SttlInf sttlInf = new SttlInf();
//SttlInf下的子节点
Element SttlReptFlgEle = e.element("SttlReptFlg");
SttlReptFlg = SttlReptFlgEle.getTextTrim();
Element SttlDCFlgEle = e.element("SttlDCFlg");
SttlDCFlg = Integer.valueOf(SttlDCFlgEle.getTextTrim());
Element SttlAmtEle = e.element("SttlAmt");
SttlAmt = new BigDecimal(SttlAmtEle.getTextTrim().replace("CNY", ""));
//设值
sttlInf.setSttlAmt(SttlAmt);
sttlInf.setSttlDCFlg(SttlDCFlg);
sttlInf.setSttlReptFlg(SttlReptFlg);
//获取BatchList节点
Element BatchListEle = e.element("BatchList");
//获取BatchInf
List
for(Element e2 : BatchInfList){
List
BatchInf batchInf = new BatchInf();
String BatchId = "";
Integer BatchDCFlg = null;
BigDecimal BatchNetAmt = null;
Element BatchIdEle = e2.element("BatchId");
BatchId = BatchIdEle.getTextTrim();
Element BatchDCFlgEle = e2.element("BatchDCFlg");
BatchDCFlg = Integer.valueOf(BatchDCFlgEle.getTextTrim());
Element BatchNetAmtEle = e2.element("BatchNetAmt");
BatchNetAmt = new BigDecimal(BatchNetAmtEle.getTextTrim().replace("CNY", ""));
batchInf.setBatchDCFlg(BatchDCFlg);
batchInf.setBatchId(BatchId);
batchInf.setBatchNetAmt(BatchNetAmt);
//获取SubItemList节点
Element SubItemListEle = e2.element("SubItemList");
//获取BatchInf
List
for(Element e3 : SubItemInfList){
SubItemInf subItemInf = new SubItemInf();
String subItem = "";
subItem = e3.getTextTrim().replace("CNY", "");
subItemInf.setSubItemInf(subItem);
SubItemList.add(subItemInf);
}
batchInf.setSubItemList(SubItemList);
BatchList.add(batchInf);
}
sttlInf.setBatchList(BatchList);
SttlList.add(sttlInf);
}
accountInfoEntityResp.setSttlList(SttlList);
return accountInfoEntityResp;
}
dom4j解析多层xml
package com.bessky.hrmis.test;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4JDemo {
public static void main(String[] args) throws Exception {
// 1.创建Reader对象
SAXReader reader = new SAXReader();
String str = "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ "
+ " \r\n" + "";
// 2.加载xml
Document document = DocumentHelper.parseText(str);
// 3.获取根节点
Element rootElement = document.getRootElement();
Iterator iterator = rootElement.elementIterator();
System.out.println("根节点:" + rootElement.getName()); // 拿到根节点的名称
Iterator bbbb = rootElement.elementIterator("authenticationSuccess");
while (bbbb.hasNext()) {
Element recordEless = (Element) bbbb.next();
Iterator cccc = recordEless.elementIterator("attributes");
while (cccc.hasNext()) {
Element itemEle = (Element) cccc.next();
String username = itemEle.elementTextTrim("job_number");
System.err.println("---------"+username);
}
}
}
}
如果后面还有子级继续while向下取数据
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~