将原始XML字符串转换为java对象列表?

时间:2017-04-06 22:25:46

标签: java xml jaxb unmarshalling xstream

好的 - 我知道这应该很容易 - 但出于某种原因 - 我无法让它发挥作用!

假设我有以下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标签因为来自这个 - 我看到这个存在,我会认为它可能是我想要的 - 但我不确定,可能有人在这个社区可能对我也有一些指导意见吗?

1 个答案:

答案 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>