使用Retrofit与Simple XML解析XML遇'route'元素匹配错误求方案
解决Retrofit结合Simple XML解析元素不匹配的问题
看来你遇到的问题是Simple XML没法把返回XML里的<route>元素正确映射到你的Routes类,核心原因是实体类的注解配置和XML结构不匹配,咱们来一步步修正:
问题分析
你的XML结构是根节点<routes>下直接包含多个<route>子元素,但你的Routes类里的@ElementList注解既没指定要匹配的元素名称,也没开启inline模式,导致Simple XML找不到对应的映射关系,才抛出了那个元素不匹配的异常。
修正后的实体类代码
Routes类(根节点映射)
@Root(name = "routes") public class Routes { // inline=true表示<route>直接作为<routes>的子元素,无需额外包裹标签 @ElementList(inline = true, name = "route") private List<Route> routes; // Getter和Setter public List<Route> getRoutes() { return routes; } public void setRoutes(List<Route> routes) { this.routes = routes; } }
Route类(子元素映射)
你的Route类注解基本没问题,这里再确认一下写法:
@Root(name = "route") public class Route { @Element(required = false) private String id; @Element(required = false) private String name; @Element(required = false) private String update; // Getter和Setter public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUpdate() { return update; } public void setUpdate(String update) { this.update = update; } }
关键注解说明
@Root(name = "routes"):明确指定该类对应XML的根节点<routes>,让Simple XML能准确识别根元素。@ElementList(inline = true, name = "route"):inline=true:告诉Simple XML,列表里的每个<route>元素直接是根节点<routes>的子元素,不需要额外的外层包裹标签。name="route":指定列表中的每个元素对应XML里的<route>标签,完美匹配你返回的XML结构。
额外检查
别忘了确保你的Retrofit实例配置了SimpleXmlConverterFactory,这样才能正确解析XML响应:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("你的服务器基础URL") .addConverterFactory(SimpleXmlConverterFactory.create()) .build();
内容的提问来源于stack exchange,提问作者ashishdhiman2007
相关产品推荐
相关产品推荐

