Android xml解析 简书,Retrofit之解析xml (详细)

本文详细介绍了在Android开发中如何使用Retrofit结合SimpleXmlConverterFactory进行XML解析,包括依赖库的添加、请求体和响应体的XML Bean定义,以及关键代码示例。强调了XML节点命名、顺序和路径的重要性,并提供了错误处理的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4c9489fbc2aa?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

前言

在开发中, 一般都使用json解析, 但在最近搞的一个项目中, 需要接入固有的老接口,必须用xml进行解析. 搜索网上关于xml解析的文章不多, 也不够详细, 所以在经过一系列采坑之后, 我决心贡献自己的微薄经验. retrofit自带的json解析是GsonConverterFactory, xml解析时需替换为SimpleXmlConverterFactory, 此项目我采用了retrofit + rxjava2 + dagger2 + mvp + xml

准备工作:建议先使用postman测试接口

4c9489fbc2aa?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

本文侧重于介绍xml解析

1、依赖库

compile('com.squareup.retrofit2:converter-simplexml:2.3.0') {

exclude group: 'xpp3', module: 'xpp3'

exclude group: 'stax', module: 'stax-api'

exclude group: 'stax', module: 'stax'

}

2、请求体实例

可以看到根节点为soap:Envelope, 第二层节点有soap:Header和soap:Body; 在soap:Header内部包含两层节点为kios:kioskSoapHeader以及最内层两个元素; 在soap:Body内部也包含两层节点为kios:assignRoom和其内部AssignRoom

以下为soap:Envelope节点写法

@Root(name = "soap:Envelope", strict = false)

@NamespaceList({

@Namespace(reference = "http://www.w3.org/2003/05/soap-envelope", prefix = "soap"),

@Namespace(reference = "http://kunlun.shijinet.cn/project/kiosk/", prefix = "kios")

})

@Default

@Order(elements = {

"soap:Header/kios:kioskSoapHeader[1]/hardwareId",

"soap:Header/kios:kioskSoapHeader[1]/stationId",

"soap:Body/kios:assignRoom/AssignRoom"

})

public class AssignRoomParams {

public AssignRoomParams(String hardwareId, String stationId, AssignRoomKey assignRoom) {

this.hardwareId = hardwareId;

this.stationId = stationId;

this.AssignRoom = assignRoom;

}

@Element

@Path("soap:Header/kios:kioskSoapHeader[1]/")

public String hardwareId;

@Element

@Path("soap:Header/kios:kioskSoapHeader[1]/")

public String stationId;

@Element

@Path("soap:Body/kios:assignRoom/")

public AssignRoomKey AssignRoom;

}

因为xml请求时是无序的, 有可能造成soap:Body在soap:Header节点上部, 造成请求参数错误; 所以此处采用了@Order与@path结合, 是为了保证soap:Header和soap:Body的上下次序;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值