org.w3c.dom.Document

目的
DOMツリーを走査する

関連クラス

今回のソース
// Document Sample

import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.*;

public class Main
{
	public static void main(String args[])
	{
		try
		{
			// XMLファイルのパースとDOMツリーの取得
			DOMParser parser = new DOMParser();
			parser.parse(args[0]);
			Document xml_doc = parser.getDocument();

			// ルート要素の取得と表示
			Element root = xml_doc.getDocumentElement();
			System.out.println("Root: " + root.getNodeName());
			printNodeList(root.getChildNodes());
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}

	private static void printNodeList(NodeList node_list)
	{
		// 子要素が無ければ、何も表示しないで抜ける
		int node_list_length = node_list.getLength();
		if(node_list_length == 0)
			return;

		// 複数の子要素に対して処理をする
		for(int i=0; i<node_list_length; i++)
		{
			Node node = node_list.item(i);
			if(node.getNodeType() == Node.ELEMENT_NODE)
			{
				// 節なら(子要素を持つなら)、再帰呼び出しをする
				System.out.println("Element: " + node.getNodeName());
				printNodeList(node.getChildNodes());
			}
			else
			{
				// 葉なら(子要素を持たないなら)、値を表示する
				String node_text = node.getNodeValue();
				if(node_text.trim().length() != 0)
					System.out.println("Node: " + node.getNodeValue());
			}
		}
	}
}
Source is here. (ZIP Format, 1087Byte, Shift-JIS)

コンパイル&実行
javac Main.java
java Main test.xml

説明
(概略)

DOMツリーを、順番に走査しています。
節を用いて再帰呼び出しをすることで、全要素を表示しています。

DOMツリーの走査と言っても、普通の木構造の走査と変わらないので、
アルゴリズムなどの本を読めば、より分かることでしょう。

(サンプルプログラムの説明)

if(node_text.trim().length() != 0)
XMLファイル中に存在するタブ文字が、テキストノードと解釈されてしまうので、
スペースのみのテキストノードは無視するようにしています。