本文は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


  1. <?xml version=”1.0encoding=”Shift_JIS?>
  2.  
  3. <message>Hello World</message>

解析用のJavaソースです。

  1. import java.io.*;
  2. import javax.xml.parsers.*;
  3. import org.w3c.dom.Document;
  4. import org.w3c.dom.Element;
  5.  
  6. public class HelloWorldDOM {
  7.   public static void main (String[] args) {
  8.     try {
  9.       // ドキュメントビルダーファクトリを生成
  10.       DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
  11.       // ドキュメントビルダーを生成
  12.       DocumentBuilder builder = dbfactory.newDocumentBuilder();
  13.       // パースを実行してDocumentオブジェクトを取得
  14.       Document doc = builder.parse(new File("helloworld.xml"));
  15.       // ルート要素を取得(タグ名:message)
  16.       Element root = doc.getDocumentElement();
  17.       // 最初の子ノード(テキストノード)の値を表示
  18.       System.out.print(root.getFirstChild().getNodeValue());
  19.     } catch (Exception e) {
  20.       e.printStackTrace();
  21.     }
  22.   }
  23. }

SAX

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

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

  1. import javax.xml.parsers.*;
  2. import org.xml.sax.*;
  3. import org.xml.sax.helpers.*;
  4. import java.io.*;
  5.  
  6. public class HelloWorldSax extends DefaultHandler {
  7.   public static void main(String[] argv) {
  8.     try {
  9.       // SAXパーサーファクトリを生成
  10.       SAXParserFactory spfactory = SAXParserFactory.newInstance();
  11.       // SAXパーサーを生成
  12.       SAXParser parser = spfactory.newSAXParser();
  13.       // XMLファイルを指定されたデフォルトハンドラーで処理します
  14.       parser.parse(new File("helloworld.xml"), new HelloWorldSax());
  15.     } catch (Exception e) {
  16.       e.printStackTrace();
  17.     }
  18.   }
  19.   /**
  20.    * ドキュメント開始時
  21.    */
  22.   public void startDocument() {
  23.     System.out.println("ドキュメント開始");
  24.   }
  25.   /**
  26.    * 要素の開始タグ読み込み時
  27.    */
  28.   public void startElement(String uri,
  29.                            String localName,
  30.                            String qName,
  31.                            Attributes attributes) {
  32.  
  33.     System.out.println("要素開始:" + qName);
  34.   }
  35.   /**
  36.    * テキストデータ読み込み時
  37.    */
  38.   public void characters(char[] ch,
  39.                          int offset,
  40.                          int length) {
  41.  
  42.     System.out.println("テキストデータ:" + new String(ch, offset, length));
  43.   }
  44.   /**
  45.    * 要素の終了タグ読み込み時
  46.    */
  47.   public void endElement(String uri,
  48.                          String localName,
  49.                          String qName) {
  50.  
  51.     System.out.println("要素終了:" + qName);
  52.   }
  53.   /**
  54.    * ドキュメント終了時
  55.    */
  56.   public void endDocument() {
  57.     System.out.println("ドキュメント終了");
  58.   }
  59. }

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ソース

  1. import java.io.File;
  2. import org.jdom.Element;
  3. import org.jdom.Document;
  4. import org.jdom.JDOMException;
  5. import org.jdom.input.SAXBuilder;
  6. public class Main {
  7.  public static void main(String[] args) {
  8.   try {
  9.    Document doc = new SAXBuilder().build( new File(helloworld.xml) );
  10.    Element root = doc.getRootElement();
  11.   } catch (JDOMException e) {
  12.    System.out.println(e);
  13.   }
  14.  }
  15. }

DOM4J

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

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

  1. import org.dom4j.Document;
  2. import org.dom4j.DocumentHelper;
  3. import org.dom4j.Element;
  4.  
  5. public class Users { 
  6.  
  7. public Document createDocument() {
  8. Document document = DocumentHelper.createDocument();
  9. Element root = document.addElement( "messages" );
  10.  
  11. Element me = root.addElement( "message" )
  12. .addAttribute( "attr", "A message" )
  13. .addText( "message" );
  14.  
  15. return document;
  16. }
  17. }

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

メインコンテンツEND ■
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Posted on Wednesday, 25th February 2009 by admin

Tags: , , , ,
Posted in Java | Comments (0) | 14,303 views

Leave a Reply