Java Tips – DOM – XMLドキュメントのルート要素の子要素(複数)の情報を取得するには


DOM(Document Object Model)を使用して、XMLドキュメントのルート要素の子要素(複数)の情報を取得する手順は以下の通りです。

  1. 最初の要素をNodeクラスのgetFirstChildメソッドで取得します。
  2. 次の要素はNodeクラスのgetNextSiblingメソッドで取得します。

パース処理するXMLドキュメントは以下の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <child1/>
  <child2/>
  <child3/>
  <child4/>
  <child5/>
</root>

package net.tk_factory.example.xml.dom;

import java.io.IOException;

import org.apache.log4j.Logger;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

import net.tk_factory.example.AbstractExample;

/**
 * DOM(Document Object Model)を使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>ルート要素の子要素の情報を取得します。</li>
 * </ol>
 *
 * @author Takafumi Kondo (TK Factory)
 */
public class ExampleGetChildElements extends AbstractExample
{
    /** クラス名 */
    private static final String CLASS_NAME =
            ExampleGetChildElements.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
            Logger.getLogger(ExampleGetChildElements.class.getName());

    /** 入力ファイル名 */
    private static final String IN_FILE_NAME =
            EXAMPLE_FILE_DIRECTORY + CLASS_NAME + ".xml";

    /**
     * ExampleGetChildElementsオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected ExampleGetChildElements()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * mainメソッドです。<br/>
     *
     * @param args 引数
     */
    public static void main(String[] args)
    {
        LOGGER.info("[START]" + CLASS_NAME);

        try
        {
            //パーサを生成する
            DOMParser parser = new DOMParser();

            //XMLファイルをパースする
            parser.parse(IN_FILE_NAME);

            //DOCUMENTノードを取得する
            Document document = parser.getDocument();

            if (document.hasChildNodes())
            {
                //ルート要素がある場合
                //ルート要素を取得する
                Node root = document.getFirstChild();

                //ルート要素のノード名を取得する
                LOGGER.debug(root.getNodeName());
                //ルート要素のノードタイプを取得する
                LOGGER.debug(root.getNodeType());

                if (root.hasChildNodes())
                {
                    //ルート要素に子要素がある場合
                    //子要素を取得する
                    Node child = root.getFirstChild();

                    while (child != null)
                    {
                        //子要素のノード名を取得する
                        LOGGER.debug(child.getNodeName());
                        //子要素のノードタイプを取得する
                        LOGGER.debug(child.getNodeType());

                        //次の子要素を取得する
                        child = child.getNextSibling();
                    }
                }
            }
        }
        catch (SAXException ex)
        {
            //XMLファイルのパースに失敗した場合
            LOGGER.error(getStackTrace(ex));
        }
        catch (IOException ex)
        {
            //入出力例外が発生した場合
            LOGGER.error(getStackTrace(ex));
        }

        LOGGER.info("[E N D]" + CLASS_NAME);
    }
}

上記のサンプルプログラムの実行結果は以下の通りです。

2010/04/24 22:22:27.248 [INFO ]:    0:[START]ExampleGetChildElements
2010/04/24 22:22:27.264 [DEBUG]:   16:root
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [DEBUG]:   16:child1
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [DEBUG]:   16:child2
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [DEBUG]:   16:child3
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [DEBUG]:   16:child4
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [DEBUG]:   16:child5
2010/04/24 22:22:27.264 [DEBUG]:   16:1
2010/04/24 22:22:27.264 [DEBUG]:   16:#text
2010/04/24 22:22:27.264 [DEBUG]:   16:3
2010/04/24 22:22:27.264 [INFO ]:   16:[E N D]ExampleGetChildElements

関連記事

  1. ソースを見直し、一部、修正しました。

  1. トラックバック 0

return top