JAXB接口解析 相同属性名 @XmlElementWrapper的name相同

先看一下接口字段定义:第一层array下有两层并列array集合(解析并列array标签里的数据)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述代码:(通过dom4j解析 一步一步映射到实体类)
OrderlogistnewGetResponse_HfyhEsb orderlogistnewGetResponse_hfyhEsb = JavaToXml.converyToJavaBean(cateResponseStr, OrderlogistnewGetResponse_HfyhEsb.class);
Document docum = DocumentHelper.parseText(cateResponseStr);
Element mes = docum.getRootElement();
Element BODY=mes.element(“BODY”);
Element array=BODY.element(“array”);
Iterator PkgInfDtlIterator =array.elementIterator(“PkgInfDtl”);
List ordVOlist= new ArrayList();
while(PkgInfDtlIterator.hasNext()) {
Element Pkg= PkgInfDtlIterator.next();
OrderlogistnewPkgInfDtlResponseVO orderlogistnewPkgInfDtlVO = JavaToXml.converyToJavaBean(Pkg.asXML(), OrderlogistnewPkgInfDtlResponseVO.class);
List orderlogistnewExprsInfDtlVO=new ArrayList();
List orderlogistnewOrderInfVO =new ArrayList();
Iterator elementIterator = Pkg.elementIterator(“array”);
while (elementIterator.hasNext()) {
Element rray = elementIterator.next();
Element array2 = rray.element(“ExprsInfDtl”);
if (array2 != null) {
Iterator ExprsInfDtlIterator = rray.elementIterator(“ExprsInfDtl”);
while (ExprsInfDtlIterator.hasNext()) {
Element ExprsInfDtl = ExprsInfDtlIterator.next();
OrderlogistnewExprsInfDtlResponseVO ExprsInfDtlResponseVO = JavaToXml.converyToJavaBean(ExprsInfDtl.asXML(), OrderlogistnewExprsInfDtlResponseVO.class);
orderlogistnewExprsInfDtlVO.add(ExprsInfDtlResponseVO);
}
}
Element array1 = rray.element(“OrderInf”);
if (array1 != null) {
Iterator OrderInfIterator = rray.elementIterator(“OrderInf”);
while (OrderInfIterator.hasNext()) {
Element OrderInf = OrderInfIterator.next();
OrderlogistnewOrderInfResponseVO istnewOrderInfResponseVO = JavaToXml.converyToJavaBean(OrderInf.asXML(), OrderlogistnewOrderInfResponseVO.class);
orderlogistnewOrderInfVO.add(istnewOrderInfResponseVO);
}
}
}
orderlogistnewPkgInfDtlVO.setOrderlogistnewExprsInfDtlResponseVO(orderlogistnewExprsInfDtlVO);
orderlogistnewPkgInfDtlVO.setOrderlogistnewOrderInfResponseVO(orderlogistnewOrderInfVO);
ordVOlist.add(orderlogistnewPkgInfDtlVO);
}
orderlogistnewGetResponse_hfyhEsb.getOrderlogistnewGetResponse().setOrderlogistnewPkgInfDtlResponseVOlist(ordVOlist);

还有种方法 比较笨但是也能解决

把定义的 @XmlElementWrapper(name=“array”)其中一个改成@XmlElementWrapper(name=“array1”)然后替换字符串

(字符串替换,如果是第二层中有相同属性 这么写可能有风险 因为标签的间隔不能确定):
cateResponseStr是接收的xml字符串
cateResponseStr=cateResponseStr.replace("\r\n" + " “,”\r\n" +" “).replace(”\r\n" + " “,”\r\n" +" ");

如果是第一层:
(字符串替换,无风险)
cateResponseStr是接收的xml字符串
cateResponseStr=cateResponseStr.replaceFirst("", “”).replaceFirst("", “”);

要放假了 不细写了 就截了个图 有需要的私聊我,有时间我给你讲也行,qq3165416548

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值