アキはフリーランスのプログラマーです >> Java
Sponsored link

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

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>

関連

はじめてのJakarta Commons Betwixt


このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース