我正在使用 SimpleXML for Java 来解析对 Java 类映射的 XML 响应。但是,我无法在我的 Android 设备上使用这个特定的部分。
我的 XML fragment 看起来像这样,
<t:EmailAddresses>
<t:Entry Key="EmailAddress1">sip:xxx@abs.com</t:Entry>
<t:Entry Key="EmailAddress2">smtp:xxx@abs.com</t:Entry>
<t:Entry Key="EmailAddress3">SMTP:xxx@abs.com</t:Entry>
</t:EmailAddresses>
我的 EmailAddresses 类定义如下所示,
@Root
public class EmailAddresses
{
@ElementList
private List<Entry> Entry;
public List<Entry> getEntry() { return Entry; }
public void setEntry(List<Entry> entry) { Entry = entry; }
}
我的 Entry 类看起来像这样,
@Element
public class Entry
{
@Attribute
private String Key;
public String getKey() { return Key; }
public void setKey(String key) { Key = key; }
}
当我解析运行解析器时,我只得到键,而且在尝试将所有 3 个解析为条目类列表时,我也会收到“多个根元素”错误。
有人可以指出我正确的方向吗?谢谢!!
注意:XML 命名空间“t”已正确定义。
最佳答案
以下是您应该更改的一些内容:
类别 EmailAddresses
@Root(name = "EmailAddresses") /* 1 */
@Namespace(prefix = "t", reference = "INSERT YOUR REFERENCE HERE!") /* 2 */
public class EmailAddresses
{
@ElementList(inline = true) /* 3 */
private List<Entry> Entry;
// ...
}
解释:
-
/* 1 */
:设置元素的名称(区分大小写); simple 默认会执行此操作,但您可以确保它确实正确。 -
/* 2 */
:设置命名空间及其引用;t
需要在您的 XML 中。 -
/* 3 */
:内联列表;<t:EmailAddresses>
元素由@Root()
构成元素,所有条目如下 内联元素。否则列表将创建另一个元素作为子元素, 包装它的条目。
类别 Entry
@Root(name = "Entry") /* 1 */
@Namespace(prefix = "t", reference = "INSERT YOUR REFERENCE HERE!") /* 2 */
public class Entry
{
@Text
private String text; /* 3 */
@Attribute
private String Key;
// ...
}
解释:
-
/* 1 */
:不要使用@Element
在这里,使用@Root()
. -
/* 2 */
:如上#2。 -
/* 3 */
:你的Entry
-XML 中的标签包含文本(= 元素的值,如 “sip:...”),这些也需要映射。如果文本是可选的,您可以使用@Text(required = false)
以表明这一点。
提示:创建列表的一个实例,用条目填充它并序列化它,例如到一个文件中。因此,您可以查看映射是否符合您的预期,以及您必须在何处进行一些更正。
关于android - SimpleXML Java - 读取根元素中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976452/