Commons DigesterでXMLをパースする(その3)
まだDigesterネタは続きます。
前回、Digester#addCallMethodの第三引数がゼロ以外の場合を「次回あたりに書く」と言いましたが、それはもうちょっと後にすることにして、今回は違うパターンについて書きます(^^;
まず、読み込むXMLは以下です。
<?xml version="1.0" encoding="UTF-8"?> <aaa> <bbb xxx="111" yyy="222" zzz="333"/> </aaa>
続いて、このXMLを格納するクラスです。
public class TestBean2 { private String xxx; private String yyy; private String zzz; public String getXxx() { return xxx; } public void setXxx(String xxx) { this.xxx = xxx; } public String getYyy() { return yyy; } public void setYyy(String yyy) { this.yyy = yyy; } public String getZzz() { return zzz; } public void setZzz(String zzz) { this.zzz = zzz; } }
では、パースするクラスです。
import java.io.IOException; import java.io.InputStream; import org.apache.commons.digester.Digester; import org.xml.sax.SAXException; public class TestDigester2 { private TestDigester2() throws IOException, SAXException{ InputStream in = this.getClass().getResourceAsStream("/test2.xml"); Digester digester = new Digester(); digester.addObjectCreate("aaa", "TestBean2"); digester.addSetProperties("aaa/bbb"); try { TestBean2 bean = (TestBean2)digester.parse(in); System.out.println("xxx=" + bean.getXxx()); System.out.println("yyy=" + bean.getYyy()); System.out.println("zzz=" + bean.getZzz()); } finally { in.close(); } } public static void main(String[] args) { try { new TestDigester2(); } catch (Exception e) { e.printStackTrace(); } } }
これを実行するとこうなります。
xxx=111 yyy=222 zzz=333
今回はaddSetPropertiesというメソッドを使ってます。
これは属性の値を取得するときに使用します。
便利なのは1回メソッドを呼ぶだけで、xxx,yyy,zzzの3つの属性の値を取得できているところです。
1回のメソッドでまとめて属性の値を取得するのは、値を格納するBeanで同じ名前のプロパティを使っているときにしかできないのですが、とても簡単ですね!