【问题标题】:Convert XMLl to Java object using xstream使用 xstream 将 XMLl 转换为 Java 对象
【发布时间】:2015-10-12 18:39:58
【问题描述】:

我有以下 xml。如何使用 xstream 转换为 java 对象。我尝试了几种方法,但最终得到了转换异常。 代码如下。我不知道如何转换为BookDetails 对象。

XML 字符串:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <Books>
    <bookdetails>
    <bookId>20</bookId>
    <bookName>AAAA</bookName>
    <amount>35</amount>
    </bookdetails>
    </Books>

BookDetails 类:

@XStreamAlias("bookDetails")
public class BookDetails {
@XStreamAlias("bookId")
private int bookId;
@XStreamAlias("bookName")
private String bookName;
@XStreamAlias("amount")
private int amount;
//getters and setters
}

书籍类:

@XStreamAlias("Books")
public class Books{

@XStreamAlias("bookDetails")
private List<BookDetails> bookDetails=new ArrayList<BookDetails>();
}

--------------unmarshall class method----

public BookDetails convertXml(String xml){

            xstream.processAnnotations(Books.class);
            xstream.processAnnotations(BookDetails.class);
            xstream.addImplicitCollection(Books.class,"BookDetails");
            return (BookDetails)xstream.fromXML(processOrderXML);
}

【问题讨论】:

  • 请编辑您的问题并包含您的代码,该代码无法与您遇到的确切错误一起使用。
  • 修改问题

标签: xml xstream


【解决方案1】:

您的代码有几个问题。

首先,您为 BookDetails 类使用了错误的别名。您将其声明为@XStreamAlias("bookDetails"),并且您的XML 标记全部为小写bookdetails

那么您在定义隐式集合时使用了错误的字段名称:它应该是 bookDetails - 作为您的列表字段名称,而不是 BookDetails

最后,您必须解析完整的 XML,然后才能从中获取 BookDetails 数据。而不是创建BookDetails 实例XStream 会给你Books 实例。

作为额外的观察,您不必为具有 XML 标记的确切名称的字段添加别名。

更正后的代码是:

@XStreamAlias("bookdetails")
public class BookDetails
{
    private int bookId;
    private String bookName;
    private int amount;
}

@XStreamAlias("Books")
public class Books
{
    private List<BookDetails> bookDetails = new ArrayList<BookDetails>();
}

public BookDetails convertXml(String xml)
{
    xstream.processAnnotations(Books.class);
    xstream.processAnnotations(BookDetails.class);
    xstream.addImplicitCollection(Books.class, "bookDetails");
    Books b = (Books) xstream.fromXML(xml);
    // and now you can return your BookDetails element (in case you want only first one)
    return b.bookDetails.get(0);
}

【讨论】:

  • 谢谢!我对此有了基本的了解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
相关资源
最近更新 更多