Android SimpleXML Parsing似乎在Depth中有限

时间:2014-02-20 17:11:56

标签: java android xml simple-framework

我正在尝试使用Retrofit和SimpleXML在Android上读取配置文件。

我设置了依赖项并使用了有效的XML方案。简单的XML开始解析我的文档,但当它达到某个标记/深度时,它会失败,并显示以下错误

Caused by: retrofit.converter.ConversionException: org.simpleframework.xml.core.ElementException: Element 'Host' does not have a match in class
Caused by: org.simpleframework.xml.core.ElementException: Element 'Host' does not have a match in class

我的部分xml如下所示:

<Config>
    ...
    <Identity>
        <Address>
            <Host>...</Host>
            ...
        </Address>
        ...
     </Identity>
     ...
</Config>

它会解析所有内容,直到它到达Host标记,这是第一个深层嵌套的元素。给出的错误通常表示缺少注释,但在这种情况下,它应该注释。我的映射对象如下所示:

@Root(name="Config")
public class Config {

    @ElementList(entry="Identity", inline=true)
    private List<Identity> mIdentities;

    @Root(name="Identity")
    static class Identity {

        @Element(name="Address")
        private Address mAddress;

        ...

    }

    @Root(name="Address")
    static class Address {

        @Element(name="Host")
        private String mHost;

        ...
    }
}

是否有其他人遇到类似问题并且知道问题可能是什么?或者SimpleXML是否受限于它可以达到的深度?也许这是与ListElement有关的问题?我找不到任何提及任何问题的文件。

1 个答案:

答案 0 :(得分:0)

此异常表示缺少注释 类和xml之间的错误映射。也许嵌套不正确,使用了错误的注释等。

这里很难说是什么原因,但请确保你的代码看起来像这样:

(Pseudocode,不是testet!)

@Root(name = "Address")
public class Address
{
    @Element(name="Host")
    private String mHost;

    // more things here ...
}

您可以在最小程度上测试问题,或至少显示地址的实现方式吗?顺便说一句。尝试相反的方向总是有帮助的:拿一个Config对象,序列化并检查它是否按照你的需要构建。