// 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ファイル中に存在するタブ文字が、テキストノードと解釈されてしまうので、 スペースのみのテキストノードは無視するようにしています。