簡単な入れ子構造を扱う #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]