首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

使用jaxb怎么序列化 List对象

2013-03-01 
【求助】使用jaxb如何序列化 List对象啊ListBook books new ArrayListBook()Book booknew Book()boo

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


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之间的相互转化??
非常感谢
[解决办法]
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>
[解决办法]
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>

热点排行
Bad Request.