我正在尝试使用simple xml为xml创建xml元素,我对root只感兴趣,但只对一些嵌套元素感兴趣。我只对从下面的xml获取帐户对象感兴趣。
<response xmlns="http://abc.abcdef.com/rest/xyz">
<request>
<channel>334892326</channel>
<number>486</number>
</request>
<status>
<code>200</code>
</status>
<results>
<account>
<creationTimestamp>2014-01-12T1:31:07Z</creationTimestamp>
<category>
<type>User-1</type>
<name>User-1</name>
</category>
</account>
<results>
</response>
我在bean中尝试了以下内容,但是我的结果对象包含所有值为null。
@Root(strict = false, name = "account")
@Path("response/results/account")
public class Account implements Serializable {
@Element(required = false)
private String creationTimestamp;
@Element(required = false)
private Category category;
}
答案 0 :(得分:2)
首先,指定的XML格式不正确。但主要问题是由Path注释 - “...将属性和元素映射到关联的字段或方法”引起的,它不适用于类,只适用于方法和字段。
因此,此代码可以轻松解析您的XML结构(简化版本):
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Path;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.core.Persister;
import java.io.File;
@Root(strict = false)
public class Account {
@Element
@Path("results/account")
String creationTimestamp;
@Element
@Path("results/account")
Category category;
public static void main(String[] args)
throws Exception
{
Account account = new Persister().read(Account.class, new File("example.xml"));
System.out.println(account.creationTimestamp);
System.out.println(account.category.type);
System.out.println(account.category.name);
}
}
@Root
class Category {
@Element
String type;
@Element
String name;
}
不幸的是, @Path 注释无法作为类注释提取,这就是为什么必须为每个字段编写它。