Commons Digester - マッピングAdvertisementXMLファイルの読み込み。前提ここでは以下のXMLを利用する。sample.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<books>
<book name="i need coffee">
<price>\3,000</price>
</book>
<book name="i love baby">
<price>\1,500</price>
</book>
</books>
Digesterでは、どのXMLとJavaクラスをどのようにマッピングするかというルールを開発者が指定できるため、Javaクラスは完全なPOJOで記述することができる。 ここでは一つの本を表すBookクラスと、その集まりを保持するBooksクラスを定義した。 Book.java
public class Book {
private String name = null;
private String price = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
プロパティとsetter/getterのみ。Books.java
import java.util.ArrayList;
import java.util.List;
public class Books {
List books = null;
public Books(){
this.books = new ArrayList();
}
public void addBook(Book book){
books.add(book);
}
public List getBooks(){
return this.books;
}
}
同じくプロパティとsetter/getterのみ。
マッピングする。CreateBooksObject.java
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.commons.digester.Digester;
public class CreateBooksObject{
public static void main(String[] args) throws Exception{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
Digester digester = new Digester(parser);
// ルールの設定
digester.addObjectCreate("books", Books.class);
digester.addObjectCreate("books/book", Book.class);
digester.addSetProperties("books/book");
digester.addSetNext("books/book", "addBook");
digester.addBeanPropertySetter("books/book/price");
// インスタンス生成
InputStream in = new FileInputStream("resource/sample.xml");
Books books = (Books)digester.parse(in);
List bookList = books.getBooks();
for(int i = 0; i < bookList.size(); i++){
Book book = (Book)bookList.get(i);
System.out.println(book.getName() + "\t" + book.getPrice());
}
}
}
手順は以下のとおり。
i need coffee \3,000 i love baby \1,500 ルール定義済みルールの一覧はDigester APIドキュメント内のRuleクラスより、サブクラス一覧を参照。主なルール
Advertisement |
ショートカット・634・634blog ・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログールビリヤード |