�쐬 2002/10/29
Digester
Digester��XML��Java�o�C���f�B���O�c�[���ł��B XML���p�[�X���āA���e��Java�I�u�W�F�N�g�ɕۑ����邽�߂� �ȒP��API����Ă��܂��B �ݒ�t�@�C����ǂݍ��ޏꍇ�Ȃǂɏd�܂��B XML��Java�o�C���f�B���O�Ȃ̂ŁAJava��XML�Ƃ������Ƃ͂ł��܂���B �o�C���f�B���O�c�[���Ƃ��ẮA����JAXB�Ȃǂ�����܂����A �g����悤�ɂȂ�̂͗��N�ȍ~�ł��傤�B
���s�ɂ́Acommons-digester��jar���K�v�ł��B Jakarta����_�E�����[�h���܂��B �����ł̓o�[�W����1.3���g���܂����B
�܂��A���Ɉˑ����Ă���ȉ���jar���K�v�ł��B
�ȉ��̊ȒP��XML��ǂݍ���ł݂܂��B
hoge.xml
<?xml version="1.0" encoding="Shift_JIS"?> <hoge> <foo name="foo1"> <message>foofoo</message> <bar name="bar1" age="10"/> <bar name="bar2" age="11"/> </foo> </hoge>
�l���i�[����bean�����܂��B
Hoge.java
public class Hoge { private Foo foo; public String toString(){ return super.toString() + ",foo=" + foo ; } public Foo getFoo() { return foo; } public void setFoo(Foo foo) { this.foo = foo; } }
������bean�ł��B�q�v�f��Foo�������܂��B
Foo.java
import java.util.*; public class Foo { private String message; private List bars = new ArrayList(); public String toString(){ return super.toString() + ",message=" + message + ",bars=" + bars ; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public void addChild(Bar bar){ bars.add(bar); } public List getBars(){ return bars; } }
�q�v�f��������Bar�����������̂ŁA �t�B�[���h�����X�g�ɂ��AaddChild()���\�b�h���`���܂����B ���ɁAmessage�������܂��B
Bar.java
public class Bar { private String name; private int age; public String toString(){ return super.toString() + ",name=" + name + ",age=" + age ; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } }
�����������bean�ł��B
toString()�͒l�������Ă��邱�Ƃ��m�F���邽�߂ŁA �K�{�ł͂���܂���B
�ł����āA���ۂ�Digester���g���āAXML���p�[�X���A �ǂݍ���ł݂܂��B
import java.io.*; import javax.xml.parsers.*; import org.apache.commons.digester.*; public class SimpleDigester { public static void main(String[] args) throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); Digester digester = new Digester(parser); //hoge��������Hoge����� digester.addObjectCreate("hoge", Hoge.class); //hoge/foo��������Foo����� //hoge.setFoo(foo)���� //foo.setXXX(*)���� digester.addObjectCreate("hoge/foo", Foo.class); digester.addSetNext("hoge/foo", "setFoo"); digester.addSetProperties("hoge/foo"); //foge/foo/message�������� //foo.setMessage(message�e�L�X�g) digester.addBeanPropertySetter("hoge/foo/message"); //hoge/foo/bar��������Bar����� //foo.addChild(bar)���� //bar.setXXX(*)���� digester.addObjectCreate("hoge/foo/bar", Bar.class); digester.addSetNext("hoge/foo/bar", "addChild"); digester.addSetProperties("hoge/foo/bar"); //�p�[�X���� InputStream in = new FileInputStream("src/digester/hoge.xml"); Hoge hoge = (Hoge)digester.parse(in); System.out.println(hoge); } }
addObjectCreate()�ŁA�C���X�^���X������A addSetNext()�ŁA���(�̃X�^�b�N)�̃I�u�W�F�N�g�̃��\�b�h���ĂсA addSetProperties()�őS�Ă��������ꊇ�Z�b�g�ł��܂��B
�����ƍׂ������ɂ́A������Rule�N���X�����݂����ł��B
��邱�Ƃ͊ȒP�ł����A���ׂ�̂ɋ�J���܂����B�T���v������R��������̂ɁB