Commons DigesterでXMLをパースする(その1)

XMLをパースするときは、Apache CommonsのDigesterを使うと簡単らしいです。
「らしい」というのは使ったことないからわからないのです。。。( ̄▽ ̄;)
そんなわけで、少し試してみました。

なお、Digesterを実行するには、同じCommonsのLoggingとBeanUtilsが必要になるので、忘れずにダウンロードしましょう。


まずは下のXMLをパースしてみます。

<?xml version="1.0" encoding="UTF-8"?>
<aaa>
  <bbb>111</bbb>
  <ccc>222</ccc>
  <ddd>333</ddd>
</aaa>

最初にこのXMLの内容を格納するクラスをつくります。

public class TestBean1 {
    private String bbb;
    private String ccc;
    private String ddd;
    
    public String getBbb() {
        return bbb;
    }
    public void setBbb(String bbb) {
        this.bbb = bbb;
    }
    public String getCcc() {
        return ccc;
    }
    public void setCcc(String ccc) {
        this.ccc = ccc;
    }
    public String getDdd() {
        return ddd;
    }
    public void setDdd(String ddd) {
        this.ddd = ddd;
    }
}

次にメインの処理を書きます。

import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

public class TestDigester1 {
    
    private TestDigester1() throws IOException, SAXException{
        InputStream in = this.getClass().getResourceAsStream("/test1.xml");
        Digester digester = new Digester();
        digester.addObjectCreate("aaa", "TestBean1");
        digester.addCallMethod("aaa/bbb", "setBbb", 0);
        digester.addCallMethod("aaa/ccc", "setCcc", 0);
        digester.addCallMethod("aaa/ddd", "setDdd", 0);
        
        try {
            TestBean1 bean = (TestBean1)digester.parse(in);
            System.out.println("bbb=" + bean.getBbb());
            System.out.println("ccc=" + bean.getCcc());
            System.out.println("ddd=" + bean.getDdd());
        } finally {
            in.close();
        }
    }

    public static void main(String[] args) {
        try {
            new TestDigester1();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

これを実行すると次のように表示されます。

bbb=111
ccc=222
ddd=333

ちゃんとパースされてるようですね。
コードの説明は次回します。