LoginSignup
13
13

More than 5 years have passed since last update.

javaのSimple xmlを使ってxmlをパース

Last updated at Posted at 2016-06-07

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使って操作とかもうできないな。。

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13