使用xstream将XMLl转换为Java对象

使用xstream将XMLl转换为Java对象,xml,xstream,Xml,Xstream,我有以下xml。如何使用xstream转换为java对象。我尝试了几种方法,但最终还是得到了conversionexception。 代码如下。我不知道如何转换为BookDetails对象 XML字符串: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Books> <bookdetails> <bookId>20</bookId>

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

XML字符串:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <Books>
    <bookdetails>
    <bookId>20</bookId>
    <bookName>AAAA</bookName>
    <amount>35</amount>
    </bookdetails>
    </Books>
@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 version="1.0" encoding="UTF-8" standalone="no"?>
    <Books>
    <bookdetails>
    <bookId>20</bookId>
    <bookName>AAAA</bookName>
    <amount>35</amount>
    </bookdetails>
    </Books>
@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);
}
@XStreamAlias(“书籍”)
公共课用书{
@XStreamAlias(“账簿明细”)
private List bookDetails=new ArrayList();
}
--------------解组类方法----
public BookDetails convertXml(字符串xml){
processAnnotations(Books.class);
processAnnotations(BookDetails.class);
xstream.addImplicitCollection(Books.class,“BookDetails”);
return(BookDetails)xstream.fromXML(processOrderXML);
}

您的代码有几个问题

首先,您为
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);
}
@XStreamAlias(“书籍详细信息”)
公共类书籍详情
{
私人书号;
私有字符串书名;
私人整数金额;
}
@XStreamAlias(“书籍”)
公共课用书
{
private List bookDetails=new ArrayList();
}
public BookDetails convertXml(字符串xml)
{
processAnnotations(Books.class);
processAnnotations(BookDetails.class);
xstream.addImplicitCollection(Books.class,“bookDetails”);
Books b=(Books)xstream.fromXML(xml);
//现在您可以返回BookDetails元素(以防只需要第一个元素)
返回b.bookDetails.get(0);
}

请编辑您的问题,并将不起作用的代码与您遇到的确切错误一起包含在内。修改问题谢谢!我对此有了基本的了解。