【求助】使用jaxb如何序列化 List对象啊

程静涛 2011-09-13 08:55:32

List<Book> books =new ArrayList<Book>();
Book book=new Book();
book.setName="书名1";
book.setContent="内容1";

Book book2=new Book();
book2.setName="书名2";
book2.setContent="内容2";
books.add(book);
books.add(book2);



请问使用jaxb 如何实现 list 和xml之间的相互转化??
非常感谢
...全文
1594 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
影子里的句号 2014-04-15
  • 打赏
  • 举报
回复

<?xml version="1.0" ?>
<booklist xmlns="book">
<book0 xmlns=""><age>22</age><name>陆旭</name><stuNo>11</stuNo></book0>
<book1 xmlns=""><age>33</age><name>大神</name><stuNo>33</stuNo></book1>
</booklist>
duxjin 2014-03-20
  • 打赏
  • 举报
回复
<?xml version="1.0" ?> <booklist xmlns="book"> <book0 xmlns=""><age>22</age><name>陆旭</name><stuNo>11</stuNo></book0> <book1 xmlns=""><age>33</age><name>大神</name><stuNo>33</stuNo></book1> </booklist> 有没有将上面xml ,用 jaxb 转为 list<student>,求解答哦!!!
duxjin 2014-03-20
  • 打赏
  • 举报
回复
楼主在吗? 有xml 转为 javabean集合的 例子吗? 求看一下
liufrom1989 2013-02-28
  • 打赏
  • 举报
回复

@XmlElementWrapper(name="friends")
	@XmlElement(name = "friend")
	public List<UserBean> getFriends() {
		return friends;
	}

	public void setFriends(List<UserBean> friends) {
		this.friends = friends;
	}
liufrom1989 2013-02-28
  • 打赏
  • 举报
回复
有更好的方法,XmlElementWrapper和XMLElement配合使用
huntor 2011-09-13
  • 打赏
  • 举报
回复
Book.java
@XmlType(propOrder={"name","content"})
@XmlRootElement(name="book")
public class Book {
private String name;
private String content;

@XmlElement
public final String getContent() {
return content;
}

public final void setContent(final String content) {
this.content = content;
}

@XmlElement
public final String getName() {
return name;
}

public final void setName(final String name) {
this.name = name;
}
}


BookList.java
@XmlRootElement(name="booklist")
public class BookList {
@XmlElement(name="book")
private List<Book> booklist;

public BookList(){
booklist = new ArrayList<>();
}

public void add(Book book){
booklist.add(book);
}

public Iterator<Book> iterator(){
return booklist.iterator();
}
}


            BookList books =new BookList();
Book book=new Book();
book.setName("书名1");
book.setContent("内容1");

Book book2=new Book();
book2.setName("书名2");
book2.setContent("内容2");
books.add(book);
books.add(book2);

JAXBContext context = JAXBContext.newInstance(BookList.class);

Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
File file = new File("booklist.xml");
marshaller.marshal(books,file);
marshaller.marshal(books,System.out);

<booklist>
<book>
<name>书名1</name>
<content>内容1</content>
</book>
<book>
<name>书名2</name>
<content>内容2</content>
</book>
</booklist>
brightyq 2011-09-13
  • 打赏
  • 举报
回复
book类

private String name;
private String content;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}


生成xml

List<Book> books =new ArrayList<Book>();
Book book=new Book();
book.setName("书名1");
book.setContent("内容1");

Book book2=new Book();
book2.setName("书名2");
book2.setContent("内容2");
books.add(book);
books.add(book2);

JAXBContext context = JAXBContext.newInstance(Book.class);

Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

String ns = "book";
XMLOutputFactory output = XMLOutputFactory.newInstance();
output.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);


File file = new File("d:/jaxbtest.txt");
OutputStream out = new FileOutputStream(file);
XMLStreamWriter writer = output.createXMLStreamWriter(out,"UTF-8");
writer.writeStartDocument();
writer.setDefaultNamespace(ns);
writer.writeStartElement(ns,"booklist");

int i = 0;

for(Iterator it = books.iterator();it.hasNext();){
QName qname = new QName("book" + String.valueOf(i));
i++;
Book bk = (Book)it.next();
JAXBElement<Book> bookElement = new JAXBElement<Book>(qname,Book.class,bk);
marshaller.marshal(bookElement, writer);
writer.flush();
}
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();


生成结果如下:
<?xml version='1.0' encoding='UTF-8'?>
<booklist xmlns="book">
<book0 xmlns="">
<content>内容1</content>
<name>书名1</name>
</book0>
<book1 xmlns="">
<content>内容2</content>
<name>书名2</name>
</book1>
</booklist>
程静涛 2011-09-13
  • 打赏
  • 举报
回复
求助。。。。
程静涛 2011-09-13
  • 打赏
  • 举报
回复
huntor:
Thanks,
我已经是用了该方法。
虽然引入了一个类,但是使用起来确实很方便,将原有的列表序列化,转换为统一的object序列化,这样的话,只需要在原有的ArrayList上封装成为我们的List对象就可以和 基本的object的序列化统一了。使用很方便
程静涛 2011-09-13
  • 打赏
  • 举报
回复
brightyq :
谢谢。
这种方法应该是很灵活的。转换列表的时候,依靠自主定制附加节点,是这个思想吧。反序列化的时候是要读取节点分析,放在list对象中么?

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧