JavaでXMLを操作の4種類方法とサンプルソース

本文はJavaでXMLファイルを操作するDOM、SAX、JDOMとDOM4Jという4種類の説明とサンプルソースです。

・DOM

DOMはDocument Object Modelの略です。XMLにアクセスするためのAPI(Application Programming Interface)です。W3Cによって仕様が公開されています。DOMは、XML文書をツリー構造として扱います。

これを「DOMツリー」といいます。XML文書全体を解析してDOMツリーとしてメモリ上に保存するのでデータの多いXML文書を解析する場合は多くのメモリを消費します。

以下はサンプル用のhelloworld.xml


Hello World

解析用のJavaソースです。


import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class HelloWorldDOM {
public static void main (String[] args) {
try {
// ドキュメントビルダーファクトリを生成
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
// ドキュメントビルダーを生成
DocumentBuilder builder = dbfactory.newDocumentBuilder();
// パースを実行してDocumentオブジェクトを取得
Document doc = builder.parse(new File(“helloworld.xml”));
// ルート要素を取得(タグ名:message)
Element root = doc.getDocumentElement();
// 最初の子ノード(テキストノード)の値を表示
System.out.print(root.getFirstChild().getNodeValue());
} catch (Exception e) {
e.printStackTrace();
}
}
}

SAX

SAXはSimple API for XMLの略です。DOM(Document Object Model)と並んでXMLを解析するために使用する標準APIです。SAXはXML文書を先頭から読んでいきそこで発生したイベントをアプリケーションでとらえて処理するAPIです。DOMに比べて、メモリ消費量が少ない、解析速度が速いなどのメリットがありますが、ノードの追加、削除など、XML文書を更新する機能はありません。

SAXで上記の同じのhelloworld.xmlを解析Javaソースです。


import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;

public class HelloWorldSax extends DefaultHandler {
public static void main(String[] argv) {
try {
// SAXパーサーファクトリを生成
SAXParserFactory spfactory = SAXParserFactory.newInstance();
// SAXパーサーを生成
SAXParser parser = spfactory.newSAXParser();
// XMLファイルを指定されたデフォルトハンドラーで処理します
parser.parse(new File(“helloworld.xml”), new HelloWorldSax());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* ドキュメント開始時
*/
public void startDocument() {
System.out.println(“ドキュメント開始”);
}
/**
* 要素の開始タグ読み込み時
*/
public void startElement(String uri,
String localName,
String qName,
Attributes attributes) {

System.out.println(“要素開始:” + qName);
}
/**
* テキストデータ読み込み時
*/
public void characters(char[] ch,
int offset,
int length) {

System.out.println(“テキストデータ:” + new String(ch, offset, length));
}
/**
* 要素の終了タグ読み込み時
*/
public void endElement(String uri,
String localName,
String qName) {

System.out.println(“要素終了:” + qName);
}
/**
* ドキュメント終了時
*/
public void endDocument() {
System.out.println(“ドキュメント終了”);
}
}

JDOM

JDOM(Java Document Object Model)はJavaでXMLを容易に扱うため、DOMより使いやすいAPIを提供することを目指して設計された軽量XMLライブラリです。

JDOMは以下のような特徴があります:
1、シンプルなAPIは、Javaプログラマにとって使いやすい
2、DOMと違って、Javaに特化した機能を提供しているため、生産性がDOMより優れています
3、SAXやDOMをサポートしています
4、軽量であるため、高速に動作します

以下はJDOMでhelloworld.xmlを読んでるJavaソース


import java.io.File;
import org.jdom.Element;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class Main {
 public static void main(String[] args) {
  try {
   Document doc = new SAXBuilder().build( new File(”helloworld.xml”) );
   Element root = doc.getRootElement();
  } catch (JDOMException e) {
   System.out.println(e);
  }
 }
}

DOM4J

dom4j は JDOM の派生と言われています。Javaプラットフォーム上でXML, XPath, XSLTを扱える、単純で柔軟性に富んだオープンソース・ライブラリです。Javaコレクション・フレームワークを使え、DOM, SAX, JAXPを完全にサポートしています。

以下はDOM4Jでhelloworld.xmlを生成するJavaソース

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Users {

public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement( “messages” );

Element me = root.addElement( “message” )
.addAttribute( “attr”, “A message” )
.addText( “message” );

return document;
}
}

リソース
http://www.ibm.com/developerworks/library/x-dom4j.html?S_TACT=105AGX52&S_CMP=cn-a-x DOM4Jについてトライアル

Leave a Reply

Your email address will not be published. Required fields are marked *