You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中SimpleXML的@Path注解失效问题咨询

SimpleXML @Path注解在Android Kotlin中的可用性与正确用法

首先明确:SimpleXML的@Path注解在Android Kotlin环境下完全可用,你的问题出在注解的不完整配置上,导致@Path没有被正确解析。

问题分析

从你的输出"Here we are: null never"可以看出:

  • testelement解析为null,说明没有找到firstlevel/secondlevel/testelement节点
  • one拿到了根节点的never,而不是firstlevel/secondlevel/one的always,这说明你添加的@Path("firstlevel/secondlevel")没有生效,SimpleXML还是在根节点下查找这些字段。

原因在于:Kotlin数据类中,你为字段(@field:)和构造函数参数(@param:)都添加了@Element/@ElementList注解,但只在字段上添加了@Path注解,参数上没有。SimpleXML在处理Kotlin数据类时,会优先通过构造函数注入值,所以参数上缺少@Path会导致路径配置被忽略。

修正后的代码

调整Baseobj类

把@Path注解同时添加到构造函数参数上:

@Root(name = "start", strict = false)
data class Baseobj constructor(
    @Path("firstlevel/secondlevel")
    @field:ElementList(name = "testlist", inline = true, required = false)
    @param:ElementList(name = "testlist", inline = true, required = false)
    @param:Path("firstlevel/secondlevel")
    var testlist: List<Testlist>? = listOf(),

    @Path("firstlevel/secondlevel")
    @field:Element(name = "testelement", required = false)
    @param:Element(name = "testelement", required = false)
    @param:Path("firstlevel/secondlevel")
    var testelement: String? = null,

    @Path("firstlevel/secondlevel")
    @field:Element(name = "one", required = false)
    @param:Element(name = "one", required = false)
    @param:Path("firstlevel/secondlevel")
    var one: String? = null
)

规范类名(可选但建议)

Kotlin类名遵循首字母大写的规范,建议把testlist类名改为Testlist:

@Root(strict = false, name = "testlist")
data class Testlist constructor(
    @field:Element(required = false, name = "title")
    @param:Element(required = false, name = "title")
    var title: String? = null,

    @field:Element(required = false, name = "active")
    @param:Element(required = false, name = "active")
    var active: String? = null
)

测试验证

修改后重新运行你的测试代码,应该会输出预期结果:

Here we are: 1 always

额外注意事项

  • 确保Retrofit和SimpleXML Converter的版本一致(你使用的2.4.0版本是兼容的)
  • @Path的路径格式要正确,使用/分隔层级,严格对应XML中的节点嵌套关系
  • 对于更复杂的XML结构,@Path支持XPath风格的灵活写法,比如使用通配符firstlevel/*/secondlevel匹配任意中间节点

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:07:00