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
ちゃんとパースされてるようですね。
コードの説明は次回します。