我正在尝试使用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有关的问题?我找不到任何提及任何问题的文件。
答案 0 :(得分:0)
此异常表示缺少注释 或 类和xml之间的错误映射。也许嵌套不正确,使用了错误的注释等。
这里很难说是什么原因,但请确保你的代码看起来像这样:
(Pseudocode,不是testet!)
@Root(name = "Address")
public class Address
{
@Element(name="Host")
private String mHost;
// more things here ...
}
您可以在最小程度上测试问题,或至少显示地址的实现方式吗?顺便说一句。尝试相反的方向总是有帮助的:拿一个Config
对象,序列化并检查它是否按照你的需要构建。