簡単な入れ子構造を扱う #3

バインディングにはとりあえず今は亡きRelaxerを使用してみる。手元のRelaxerは1.1ベータ(20070814)版だ。

relaxer -dir.package -java.package:school school.rnc

生成されたクラス群を使用してみる。

SchoolUser.java
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import school.*;

public class SchoolUser {
    public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
        for (SchoolGrade sg: new School("school.xml").getSchoolGrade()) {
            System.out.println("[" + sg.getName() + "]");
            for (SchoolGradeGroup sgg : sg.getSchoolGradeGroup()) {
                System.out.println("  [" + sgg.getName() + "]");
                for (SchoolGradeGroupStudent sggs : sgg.getSchoolGradeGroupStudent()) {
                    System.out.println("    [" + sggs.getName() + ", " + sggs.getHeight() + "cm]");
                }
            }
        }
    }
}

与えるデータはschool.rncに対してvalidなXML形式のUTF-8ファイルにした。

school.xml
<school>
  <grade name="ねんちょうさん">
    <group name="さくら">
      <student name="Arlene" height="154"/>
      <student name="Bret" height="170"/>
      <student name="Cindy" height="157"/>
    </group>
    <group name="もも">
      <student name="Don" height="161"/>
      <student name="Emily" height="153"/>
    </group>
  </grade>
  <grade name="ねんしょうさん">
    <group name="ひまわり">
      <student name="Franklin" height="167"/>
    </group>
    <group name="ちゅうりっぷ">
      <student name="Gert" height="164"/>
      <student name="Harvey" height="169"/>
      <student name="Irene" height="158"/>
    </group>
    <group name="あさがお">
      <student name="Jose" height="154"/>
      <student name="Katia" height="159"/>
    </group>
  </grade>
  <grade name="おませさん">
    <group name="すみれ">
      <student name="Lee" height="171"/>
    </group>
    <group name="たんぽぽ">
      <student name="Maria" height="168"/>
    </group>
  </grade>
</school>

Relaxerが自動生成したコードにJavaSE6のコンパイラが警告を発する(当然だ)が、SchoolUserの実行は恙無く終えることができる。

$ java SchoolUser
[ねんちょうさん]
  [さくら]
    [Arlene, 154cm]
    [Bret, 170cm]
    [Cindy, 157cm]
  [もも]
    [Don, 161cm]
    [Emily, 153cm]
[ねんしょうさん]
  [ひまわり]
    [Franklin, 167cm]
  [ちゅうりっぷ]
    [Gert, 164cm]
    [Harvey, 169cm]
    [Irene, 158cm]
  [あさがお]
    [Jose, 154cm]
    [Katia, 159cm]
[おませさん]
  [すみれ]
    [Lee, 171cm]
  [たんぽぽ]
    [Maria, 168cm]