Commons Digester - 定義ファイルを外部に記述するAdvertisementXMLファイルにルールを定義する
Digesterでは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>
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;
}
}
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;
}
}
ルール定義XMLファイルrule.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<digester-rules>
<pattern value="books">
<object-create-rule classname="Books" />
<set-properties-rule/>
</pattern>
<pattern value="books/book">
<object-create-rule classname="Book" />
<set-properties-rule/>
</pattern>
<pattern value="books/book">
<set-next-rule methodname="addBook" classname="Books"/>
</pattern>
<pattern value="books/book/price">
<bean-property-setter-rule/>
</pattern>
</digester-rules>
マッピングを行う。CreateBooksObjectByXml.java
import java.io.File;
import java.util.List;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
public class CreateBooksObjectByXml {
public static void main(String[] args) throws Exception{
// ルールが設定されたDigesterオブジェクトの生成
File file = new File("resource/rule.xml");
Digester digester = DigesterLoader.createDigester(file.toURL());
// オブジェクト生成
Books books = (Books)digester.parse("resource/sample.xml");
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 Advertisement |
ショートカット・634・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログール |