// 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)
DOMツリーの走査と言っても、普通の木構造の走査と変わらないので、
アルゴリズムなどの本を読めば、より分かることでしょう。
XMLファイル中に存在するタブ文字が、テキストノードと解釈されてしまうので、 スペースのみのテキストノードは無視するようにしています。