使用xstream将XMLl转换为Java对象
我有以下xml。如何使用xstream转换为java对象。我尝试了几种方法,但最终还是得到了conversionexception。 代码如下。我不知道如何转换为使用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>
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);
}
请编辑您的问题,并将不起作用的代码与您遇到的确切错误一起包含在内。修改问题谢谢!我对此有了基本的了解。