好的 - 我知道这应该很容易 - 但出于某种原因 - 我无法让它发挥作用!
假设我有以下POJO:
<PlainOldJavaObjects>
<PlainOldJavaObject>
<uuid>8119</uuid>
<name>Jimmy</name>
</PlainOldJavaObject>
<PlainOldJavaObject>
<uuid>2372</uuid>
<name>Johns</name>
</PlainOldJavaObject>
</PlainOldJavaObjects>
并且假设我有以下xml(我已将其格式化为可读性 - 实际上我将其视为未经格式化的原始字符串):
XStream xStream = new XStream();
List<PlainOldJavaObject> endResultHopefully = (List<PlainOldJavaObject>) xStream.fromXML(result);
如何将生活中的XML转换为List实例?
我尝试使用XStream - 如下:
PlainOldJavaObjects : PlainOldJavaObjects
但所有这一切似乎将以下内容打印到我的终端......
gcc -o clear.o clear.c
我到底做错了什么?
注意:添加JAXB标签因为来自这个 - 我看到这个存在,我会认为它可能是我想要的 - 但我不确定,可能有人在这个社区可能对我也有一些指导意见吗?
答案 0 :(得分:0)
使用XStream并使用@XStreamImplicit将类包装在包含PlainOldJavaObject列表的PlainOldJavaObjects类中。 这是一个例子。首先,向PlainOldJavaObject类添加注释
@XStreamAlias("PlainOldJavaObject")
public class PlainOldJavaObject implements Serializable
{
private long uuid;
private String name;
public PlainOldJavaObject()
{
}
public long getUuid()
{
return this.uuid;
}
public void setUuid(long uuid)
{
this.uuid = uuid;
}
public String getNamen()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
将@XStreamImplicit添加到PlainOldJavaObject列表
@XStreamAlias("PlainOldJavaObjects")
public class PlainOldJavaObjects
{
@XStreamImplicit
private List<PlainOldJavaObject> pojoList = new
ArrayList<PlainOldJavaObject>();
public void addPojo(final PlainOldJavaObject pojo)
{
pojoList.add(pojo);
}
public List<PlainOldJavaObject> getList()
{
return pojoList;
}
}
测试结果的类。首先将生成的xml写入字符串。然后使用String创建所需的列表。
public class TestXML
{
@Test
public void testXML()
{
PlainOldJavaObjects pojos = new PlainOldJavaObjects();
PlainOldJavaObject pojo = new PlainOldJavaObject();
pojo.setName("Jimmy");
pojo.setUuid(8119);
pojos.addPojo(pojo);
PlainOldJavaObject pojo2 = new PlainOldJavaObject();
pojo2.setName("Johns");
pojo2.setUuid(2372);
pojos.addPojo(pojo2);
XStream xstream = new XStream();
xstream.processAnnotations(PlainOldJavaObjects.class);
xstream.processAnnotations(PlainOldJavaObject.class);
String xml = xstream.toXML(pojos);
System.out.println(xml);
PlainOldJavaObjects pojos2 = (PlainOldJavaObjects)
xstream.fromXML(xml);
// list with two PlainOldJavaObject
assertEquals(2, pojos2.getList().size());
}
}
xml的输出:
<PlainOldJavaObjects>
<PlainOldJavaObject>
<uuid>8119</uuid>
<name>Jimmy</name>
</PlainOldJavaObject>
<PlainOldJavaObject>
<uuid>2372</uuid>
<name>Johns</name>
</PlainOldJavaObject>
</PlainOldJavaObjects>