JDOM入門 ~要素・属性を操作する~

JDOM により XML 文書要素や属性の操作を容易に行うことが出来る.具体的には,

    • 要素に新たな子要素を追加・削除する
    • 要素に属性を追加・削除する

などが行える.

1. 要素の追加

要素の追加は addContent メソッドを用いる。リスト 1 にルート要素に子要素を追加するプログラムと図 1 に処理の流れ図を示す。

・リスト1.要素を追加するプログラム

Element root = doc.getRootElement();
//student要素を宣言
Element student = new Element(“student”);・・・①
//student要素のコンテンツにテキスト「橋本直紀」を入れる
student.setText(“橋本直紀”); ・・・②
//ルート要素の子要素にstudentを追加
root.addContent(student); ・・・③

補足:Textノードによるテキストの設定

上 記の例ではsetTextメソッドを利用してElementに対して直接テキスト情報をsetしているが,ベターではない.厳密にいうと,タグで囲まれた テキストは「Textノード」と呼ばれるノードである.つまり,Elementと対等なわけである.JDOMにもTextというTextノードクラスがある.これを用いるとコードは次のようになる.

Text tx = new Text("dsfsdf");

root.addContent(tx);

見た目は同じだが,本来はこうするのが自然であろう.Textクラスは,文字列をappendできるメソッド持つなど,便利な面がでてくるから,XML文書を編集するようなプログラムを作成する場合は,Textクラスを積極的に使うべきだろう.

2.要素の取り出し

要素からその子供を取り出す場合は、 getChild や getChildren メソッドを使用する。リスト 3 にプログラム、図 2 にデータモデルを示す。

・リスト 3 .要素の取り出すプログラム

Element root = doc.getRootElement();

List allChildren = root.getChildren(); ・・・①

List schoolChildren = root.getChildren(“student”);・・・②

Element elem = root.getChild(“student”); ・・・③

getchildrenメソッドによる複数のエレメントの取り出し方

複数の同名要素に対しては JDOM では java.util.List が利用される.Listインタフェースとは,リスト構造を持つデータを表すインタフェースであり,Iteratorインタフェースを利用することで,リストの各要素を取り出すことができる.

List allChildren = school.getChildren();

Iterator iterator=allChildren.iterator();

while(iterator.hasNext()){

Element student=(Element)iterator.next();

}

3.要素の削除

要素の削除は基本的に removeContent メソッドを用いる。リスト 4 にその一例を示す。

・リスト 4 .要素の削除するプログラム

//removeによる4番目の要素の削除

List allChildren = root.getChildren();

allChildren.remove(3);

//すべてのstudent要素を削除

root.removeChildren(“student”);

getChildren メソッドなどによって取り出された List で要素が保持されている場合は List のメソッドである remove を使うことも出来る。リスト 5 にプログラムの一例を示す。

・リスト 5 .要素の削除するプログラム

//removeContentによる3番目の要素の削除

Element student = (Element)allChildren.get(2);

root.removeContent(student);

4.属性・属性値の追加

要素の同じような形で属性の操作も可能である。リスト 6 に要素に属性と属性値を追加する例を示す。

・リスト 6 .属性・属性値を追加するプログラム①

//Attributeオブジェクトを生成

Attribute idAttr = new Attribute(“name”, “ハシモトナオキ”);

//要素に属性を追加

studentElement.setAttribute(idAttri);

getAttribute の引数はそれぞれ属性名・属性値にあたる。上のリストのプログラムは一度 Attribute オブジェクトを作成してから要素にその属性を追加する形だが、要素に直接属性を追加することも可能である。リスト 7 にその例を示す。

・リスト 7 .属性・属性値を追加するプログラム②

studentElement.setAttribute(“name”, “ハシモトナオキ”);

5. 属性値の取り出し

取り出しの方法は追加の場合と同じく、一度 Attribute オブジェクトで属性を取り出してから属性値を取り出す方法と直接要素から属性値を取り出す方法がある。リスト 8 にそのプログラムを記す。

リスト 8 .属性・属性値を取り出すプログラム

//要素からname属性を取り出し、そこから属性値を取り出しstrnameに代入

Attribute idAttr = studentElement.getAttribute(“name”);

String strname = idAttr.getValue();

//要素から直接属性値を取り出しstrnameに代入

String strname = studentElement.getAttributeValue();

尚、取り出された属性値は String 型のデータであるので、数値などを取り扱う場合は int 型や float 型など必要に応じて型変換する必要がある。

6.属性の削除

属性の削除も可能ある。リスト 9 にその例を示す。

リスト 9 .属性を削除するプログラム

studentElement.removeAttribute(“name”);

謝辞

本ページのコンテンツは,橋本直紀君(2003年度学部卒業生)の卒業論文を参考にしている.