XMLファイルを読み込むためのライブラリ
XMLを読み込むときに、何を使っているんでしょう? - しがないプログラマ の日記 で、ちょっと探してみたのですが良さそうなのが見当たらないので自作してみました!
基本的にはタグの階層と POJOを対応させて、各フィールドに属性および単独のタグの値を対応させます。と言っても分かりづらいので具体例で説明。
下のようなXMLを読み込む場合を考えます。
<?xml version="1.0" encoding="UTF-8" ?> <statuses> <status> <created_at>Sun Apr 29 10:10:31 +0000 2007</created_at> <id>23895812</id> <user> <id>13295761</id> <name>name1</name> <screen_name>screenName1</screen_name> <protected>false</protected> </user> </status> <status> <created_at>Sun Apr 29 10:09:13 +0000 2007</created_at> <id>23894982</id> <user> <id>1295761</id> <name>name2</name> <screen_name>screenName2</screen_name> <protected>true</protected> </user> </status> </statuses>
この時、以下のクラスを用意すれば読み込むことができます。
public class Statuses { @TagName("status") private Status[] statusArray_; public Status[] getStatusArray() { return statusArray_; } } public class Status { private Date createdAt_; private int id_; @TagName("user") private User userData_; public Date getCreatedAt() { return createdAt_; } public int getId() { return id_; } public User getUser() { return userData_; } } public class User { private int id_; private String name_; private String screenName_; private boolean protected_; public int getId() { return id_; } public String getName() { return name_; } public String getScreenName() { return screenName_; } public boolean isProtected() { return protected_; } } public class Sample { private static final String FILE_PATH = "XMLファイルのパス"; public void loadXml() throws Exception { XmlLoader loader = new XmlLoader(Statuses.class, Status.class, User.class); Statuses root = loader.load(new BufferedInputStream(new FileInputStream(FILE_PATH)), Statuses.class); // rootを使ってXML情報を処理する。 } }
こんな感じです。現在、プリミティブ型とString型、User定義型の読み込みに対応しています。ここはこれから拡張可能にしようと構想中です。
とりあえず、以下のURLからDownloadできるようにしてあります。β版ですが興味がありましたら使ってみてください。そして、フィードバックがあればとてもありがたいです。
http://taoe.jpn.ch:8080/java/ch.jpn.taoe.axloader-0.1.0.jar
追記
ソースをSubversionで取れるようになっています。
http://taoe.jpn.ch:8080/svn/trunk/AnnotationXmlLoader