Read and Write XML Document – JAXB


Hôm nay chúng ta sẻ triển khai sử dụng JAXB cho việc đọc và viết XML document như thế nào.

JAXB viết tắt của Java Architecture for XML Binding . Nó là chuẩn của java để định nghĩa cách mà Java Objects thì được chuyển vào trong XML và ngược lại từ XML về Java Object.

JAXB nó là một API thiết kế cho việc read and write Java Object đến XML documents. Và nó được áp dụng cho rất nhiều cho việc đọc và viết XML thông qua JAVA.

Chúng ta tạo 1 class Book


package thaihoanghai;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name="book")
//If you want you can define the order in which the fields are written Optional
@XmlType(propOrder = { "author", "name", "publisher", "isbn" })
public class Book {
 private String name;
 private String author;
 private String publisher;
 private String isbn;


 // If you like the variable name, e.g. "name", you can easily change this name for your XML-Output:
 @XmlElement(name="title")
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getAuthor() {
 return author;
 }
 public void setAuthor(String author) {
 this.author = author;
 }
 public String getPublisher() {
 return publisher;
 }
 public void setPublisher(String publisher) {
 this.publisher = publisher;
 }
 public String getIsbn() {
 return isbn;
 }
 public void setIsbn(String isbn) {
 this.isbn = isbn;
 }
}

 

Tiếp đến chúng ta tạo 1 class BookStore như sau :


package thaihoanghai;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
//This statement means that class "Bookstore.java" is the root-element of our example
@XmlRootElement(namespace="JAXB-Demo.thaihoanghai")
public class Bookstore {
 // XmLElementWrapper generates a wrapper element around XML representation
 @XmlElementWrapper(name = "bookList")
 // XmlElement sets the name of the entities
 @XmlElement(name="book")
 private ArrayList<Book> bookList;
 private String name;
 private String location;
 public ArrayList<Book> getListBook() {
 return bookList;
 }
 public void setBookList(ArrayList<Book> bookList) {
 this.bookList = bookList;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getLocation() {
 return location;
 }
 public void setLocation(String location) {
 this.location = location;
 }


}

OK giờ chúng ta viết Class Cho việc Read & Write JAVA <=>XML


package test;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import thaihoanghai.Book;
import thaihoanghai.Bookstore;
public class BookMain {

private static final String BOOKSTORE_XML = "./bookstore-jaxb.xml";

public static void main(String[] args) throws JAXBException, IOException {

ArrayList<Book> bookList = new ArrayList<Book>();

// create books
 Book book1 = new Book();
 book1.setIsbn("978-0060554736");
 book1.setName("The Game");
 book1.setAuthor("Neil Strauss");
 book1.setPublisher("Harpercollins");
 bookList.add(book1);

Book book2 = new Book();
 book2.setIsbn("978-3832180577");
 book2.setName("Feuchtgebiete");
 book2.setAuthor("Charlotte Roche");
 book2.setPublisher("Dumont Buchverlag");
 bookList.add(book2);

// create bookstore, assigning book
 Bookstore bookstore = new Bookstore();
 bookstore.setName("Fraport Bookstore");
 bookstore.setLocation("Frankfurt Airport");
 bookstore.setBookList(bookList);

// create JAXB context and instantiate marshaller
 JAXBContext context = JAXBContext.newInstance(Bookstore.class);
 Marshaller m = context.createMarshaller();
 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

// Write to System.out
 m.marshal(bookstore, System.out);

// Write to File
 m.marshal(bookstore, new File(BOOKSTORE_XML));

// get variables from our xml file, created before
 System.out.println();
 System.out.println("Output from our XML File: ");
 Unmarshaller um = context.createUnmarshaller();
 Bookstore bookstore2 = (Bookstore) um.unmarshal(new FileReader(BOOKSTORE_XML));
 ArrayList<Book> list = bookstore2.getListBook();
 for (Book book : list) {
 System.out.println("Book: " + book.getName() + " from "
 + book.getAuthor());
 }
 }
}

OK đây là kết quả :

d1

 

Ok chúc các bạn thành công :

Nguồn tham khảo : http://www.vogella.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: