import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class CloneDocument {
  public static void main(String argv[]) throws Exception {
    DOMParser parser = new DOMParser();
    for (int i = 0; i < argv.length; i++) {
      String arg = argv[i];
      System.out.println("argv["+i+"]: "+arg);
      parser.parse(arg);
      Document document = parser.getDocument();
      // printChildren(document.getChildNodes());
      // printChildren(document.getDocumentElement().getChildNodes());
      System.out.println("Pass 1a:");
      printNode(document, "");
      System.out.println("Pass 1b:");
      printNode(document, "");
      Document clonedDocument = (Document)document.cloneNode(true);
      // printChildren(clonedDocument.getChildNodes());
      // printChildren(clonedDocument.getDocumentElement().getChildNodes());
      System.out.println("Pass 2a:");
      printNode(clonedDocument, "");
      System.out.println("Pass 2b:");
      printNode(clonedDocument, "");
    }
  }
  public static void printChildren(NodeList children) {
    int length = children.getLength();
    System.out.print(length);
    System.out.print(": ");
    for (int i = 0; i < length; i++) {
      System.out.print(children.item(i).getNodeName());
      System.out.print(' ');
    }
    System.out.println();
  }
    
  public static void printNode(Node node, String prefix) {
    String name= node.getNodeName();
    if (name!= null)
      System.out.println(prefix +'[' +name +']');

    NodeList children= node.getChildNodes();
    Node child;
    int count= 0;
    while((child= children.item(count++))!= null)
      printNode(child, prefix +"  ");    
  }    
}
