繁体   English   中英

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

[英]Convert a raw XML string into a list of java objects?

好的-我知道这应该很容易-但是出于某种原因-我无法使它正常工作!

可以说我有以下POJO:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
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;
    }

    /* Omitted HashCode & Equals for brevity. */
}

可以说我有以下xml(出于可读性的考虑,对它进行了格式化-实际上,我将其作为未格式化的原始字符串来获取):

<PlainOldJavaObjects>
    <PlainOldJavaObject>
        <uuid>8119</uuid>
        <name>Jimmy</name>
    </PlainOldJavaObject>
    <PlainOldJavaObject>
        <uuid>2372</uuid>
        <name>Johns</name>
    </PlainOldJavaObject>
</PlainOldJavaObjects>

如何在现成的地狱中将XML转换为List实例?

我尝试使用XStream-如下所示:

XStream xStream = new XStream();
List<PlainOldJavaObject> endResultHopefully = (List<PlainOldJavaObject>) xStream.fromXML(result);

但是似乎所有操作似乎都将以下内容打印到我的终端上...

PlainOldJavaObjects : PlainOldJavaObjects

我到底在做什么错呢?

注意:添加JAXB标记是出于对这一点的考虑-我认为这是存在的,并且我想它可能是我想要的-但我不确定,也许有人对这个社区可能有一些指导意见吗?

使用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写入字符串。 然后使用字符串创建所需的列表。

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM