本文は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
- <?xml version=”1.0″ encoding=”Shift_JIS” ?>
- <message>Hello World</message>
解析用の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 は 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についてトライアル
Posted on Wednesday, 25th February 2009 by admin
Tags: DOM, DOM4J, JDOM, SAX, XML
Posted in Java | Comments (0) | 14,303 views
