#1.Simple xml
javaで用意されている、xmlパース&出力用の外部ライブラリ
アノテーションを使ってxmlの構造を示すことが出来る。
今回はパースするのに利用した。
公式のサイトは以下
http://simple.sourceforge.net/home.php
#2.今回表現するXML
XML
<test>
<test2>
<name>保険</name>
<result>
<total>2</total>
<match>
<tel>090</tel>
<adress>2536542</adress>
</match>
<match>
<tel>080</tel>
<adress>209999936542</adress>
</match>
</result>
</test2>
</test>
matchタグが複数出現して、出現回数をtotalに記載。
webApiかなんかで、検索したら上記のようなXMLが返ってきたことを想定
あまりストーリーに自信はないので、こんな構造のxmlという認識でお願いしたい。
#3.XMLに対応するJavaのDTOクラス
DtoClass
// XMLのルート要素としてtest要素を指定
// クラス名がTestなら実は指定しなくてもよい
@Root(name="test")
public class DtoClass {
/** シリアライズバージョン */
private static final long serialVersionUID = 1111L;
// xmlのパスで言うtest/test2配下の要素であることを明示
@Path("test2")
// xmlの要素であることを示す
@Element
private String name;
/** 件数 */
@Path("test2/result")
@Element
private String total;
/** 一致情報 */
@Path("test2/result")
// 要素がふくすうある場合はElementList
@ElementList(inline=true,required=false)
private List<MatchDto> match = new ArrayList<>();
// setter getterは省略
MatchDto
@Root(name="match")
public class MatchDto {
/** シリアライズバージョン */
private static final long serialVersionUID = -22222L;
/** 電話番号 */
// requiredは値の必須有無を表すfalseは「必須でない」を表す
@Element(required=false)
private String tel;
/** 住所*/
@Element(required=false)
private String adress;
// setter getterは省略
#4.いざパース
これだけ。
パースするとこ
Serializer serial = new Persister();
// fileのところはFileクラスでもよいし、ストリームでもOK
DtoClass j = serial.read(DtoClass.class, file);
あとは普通にsetter getterでアクセスするのみ
#5.使ってみた所感
簡単。いつの間にかxmlを操作する手段がたくさん出ているようだった。
DOM使って操作とかもうできないな。。