Jakarta Commons Betwixt .betwixt ファイルの記述の仕方
はじめに、ここでは.betwixtファイルの書き方について、私が知っていることを説明しています。
これでXMLの記述形式をある程度変更できると思います。
しかしながら、いまいち、記述形式を変更した後の有効活用を思い浮かびません。
手書きで編集するなら、デフォルトでも大丈夫だと思うからです。
.betwixtファイル
登場するクラス
class Person int age String name Person lover Friend Friend[] class Friend String name
.betwixtを使わないデフォルトの出力
<?xml version="1.0" encoding="Shift_Jis"?> <Person id="1"> <age>14</age> <frends> <frend frendname="tom" id="2"/> <frend frendname="taro" id="3"/> </frends> <lover id="4"> <age>31</age> <frends/> <name/> </lover> <name>jack</name> </Person>
重要
【1】.betwixtファイルは出力したいクラスと同じ階層に、拡張子違いの同じ名前でないといけません。
【2】各クラスに一つ必要です。つまり、別のクラスのXML出力の仕方を記述することはできません。
シンプルな例
ファイル名は、Person.betwixtとしないといけません。(パッケージ名が同じようになるよう配置すること)
info要素のから始まり、
elementのname属性で指定したmylistが、Personの代わりに、ルートの要素名となります。
そして、addDefaults要素を記述することで、その他の要素が出力されます。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='mylist'> <addDefaults/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <mylist id="1"> <age>14</age> <frends> <frend id="2"> <name>tom</name> </frend> <frend id="3"> <name>taro</name> </frend> </frends> <lover id="4"> <age>31</age> <frends/> <name/> </lover> <name>jack</name> </mylist>
addDefaultsを省略する
ここでは、Root以外宣言してないので、他の要素は一切出力されません。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='mylist'> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <mylist/>
属性として指定する
attribute要素にnameとproperty属性を指定します。
name属性で指定したものがそのまま属性名になります。propertyの所にクラスの値が入ります。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='mylist'> <attribute name="name" property="name"/> <attribute name="age" property="age"/> <addDefaults/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <mylist name="jack" age="14" id="1"> <frends> <frend id="2"> <name>tom</name> </frend> <frend id="3"> <name>taro</name> </frend> </frends> <lover name="" age="31" id="4"> <frends/> </lover> </mylist>
他のXml要素
elementやattributeやtextを使って、他のXMLを記述することも可能です。
<other memo="10">think</other>
ちなみに、loverもPersonのため、上記行が、2回登場します。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='user'> <attribute name="name" property="name"/> <attribute name="age" property="age"/> <element name="other"> <attribute name="memo" value="10"/> <text value='think'/> </element> <addDefaults/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <user name="jack" age="14" id="1"> <other memo="10">think</other> <frends> <frend id="2"> <name>tom</name> </frend> <frend id="3"> <name>taro</name> </frend> </frends> <lover name="" age="31" id="4"> <other memo="10">think</other> <frends/> </lover> </user>
要素名を指定
beanをエレメントとして指定することも、もちろん可能です。ここではloverの名前をmyloverに変えてみました。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='user'> <element name="name" property="name"/> <element name="age" property="age"/> <element name="mylover" property="lover"/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <user id="1"> <name>jack</name> <age>14</age> <mylover id="2"> <name/> <age>31</age> </mylover> </user>
リスト要素名を指定する
リストのエレメント名も指定できます。ただし、これを指定すると、デフォルトでは
<frends><frend/></frends> だったものが
<flist/>
という風に変化します。
また、<addDefaults/>が必要です。
.betwixtファイル
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='mylist'> <element name="flist" property="friends"> </element> <addDefaults/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <mylist id="1"> <flist id="2"> <name>tom</name> </flist> <flist id="3"> <name>taro</name> </flist> <age>14</age> <lover id="4"> <age>31</age> <name/> </lover> <name>jack</name> </mylist>
Friend.betwixtも記述する。
.betwixtファイル
Person.betwixt
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='mylist'> <element name="flist" property="friends"> </element> <addDefaults/> </element> </info>
Friend.betwixt
<?xml version='1.0' encoding='Shift_Jis' ?> <info> <element name='myfrend'> <attribute name="frendname" property="name"/> </element> </info>
出力
<?xml version="1.0" encoding="Shift_Jis"?> <mylist id="1"> <flist frendname="tom" id="2"/> <flist frendname="taro" id="3"/> <age>14</age> <lover id="4"> <age>31</age> <name/> </lover> <name>jack</name> </mylist>