2. Digesterのスタックとパターン2.1. スタックDigesterの内部にはスタックがあり、ルールによって作成したインスタンスが順につまれて行きます。 スタックとは本のようにデータを積み重ねていくデータ構造です。 DigesterではXML文書を上から解析し、指定したパターンが来た時にインスタンスを作成し、スタックに積みます(push)。 積まれたインスタンスは指定したパターンが閉じられた時にスタックから取り除かれます(pop)。 オブジェクトを作成しないルールの場合、通常ではスタックの一番上のインスタンスが対象となります。 またルールによっては、上から二番目のインスタンスを対象とすることもあります。 前章でのXML文書とルールを例に、スタックの遷移を見て行きます。1:<object> 2: <param1>param1</param1> 3: <param2>param2</param2> 4: 5: <parent> 6: <child>child</child> 7: </parent> 8:</object>
Digester d = new Digester();
d.addObjectCreate("object", DigesterBean.class);
d.addBeanPropertySetter("object/param1");
d.addBeanPropertySetter("object/param2");
d.addObjectCreate("object/parent", Parent.class);
d.addSetNext("object/parent", "setParent");
d.addBeanPropertySetter("object/parent/child");
DigesterBean bean = (DigesterBean)d.parser(new File("sample.xml"));
System.out.println(bean.toString());
上記のXMLを読み込むプログラムを実行した際のスタックの遷移を追っていきます。
1行目 | | | DigesterBean | +--------------+addObjectCreate()メソッドにより、ObjectCreateルールが追加されています。 ObjectCreate("object",DigesterBean.class)ルールにより、DigesterBeanクラスのインスタンスが作成され、スタックの一番上に積まれます。
2,3行目
5行目 | | | Parent | +--------------+ | DigesterBean | +--------------+
addObjectCreate()メソッドにより、ObjectCreateルールが追加されています。
ObjectCreate("object/parent", Parent.class)ルールにより、Parentクラスのインスタンスが作成され、スタックの一番上に積まれます。
6行目
7行目 | | | DigesterBean | +--------------+ Parentタグが閉じたので、Parentクラスのインスタンスがスタックから取り除かれます。
8行目 | | +--------+ objcetタグが閉じたので、Objectタグが開始した際に作られた、DigesterBeanクラスのインスタンスがスタックより取り除かれます。 |
![]()
![]()
|