Commons

�쐬 2002/10/29

Digester

Digester���āH

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

�g���Ă݂�

���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

�Q�l


TOP