// package dom;

import java.io.Serializable;
import java.lang.*;
import java.util.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import org.xml.sax.ErrorHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.apache.xerces.parsers.DOMParser;

import ui.DOMParserSaveEncoding;


public class DOMTest {

  public static void arbeite(NodeList nodes) {
    int len = (nodes != null) ? nodes.getLength() : 0;
//    System.out.println(len);
    for (int i=0; i < len; i++) {
      Node node = nodes.item(i);
      switch (node.getNodeType()) {
        case Node.DOCUMENT_NODE: {
           System.out.println("Document Node " + node.getNodeName() );
//           arbeite(node.getChildNodes());
           break;
        }
        case Node.ELEMENT_NODE: {

          if (node.getNodeName().equals("rdf:Description")) {
            if (node.getParentNode().getNodeName().equals("rdf:li") && node.getParentNode().getParentNode().getNodeName().equals("rdf:Bag")) {
              Element element = (Element)node;
              System.out.println(element.getAttribute("vCard:FN")); // for testing
              ArrayList authors = new ArrayList();
              authors.add(element.getAttribute("vCard:FN"));
            }
          }

          if (node.getNodeName().equals("rdf:li")) {
            if (node.getParentNode().getNodeName().equals("rdf:Alt") && node.getParentNode().getParentNode().getNodeName().equals("dc:identifier")) {
              Element element = (Element)node;
              System.out.println(element.getAttribute("rdf:resource")); // for testing
              ArrayList fullTextSrc = new ArrayList();
              fullTextSrc.add(element.getAttribute("rdf:resource"));
            }
          }

          if (node.getNodeName().equals("rdf:Description")) {
            if (node.getParentNode().getNodeName().equals("dcq:created")) {
              Element element = (Element)node;
              System.out.println(element.getAttribute("rdf:value")); // for testing
              String dateCreated = element.getAttribute("rdf:value");
            }
          }

          if (node.getNodeName().equals("rdf:Description")) {
            if (node.getParentNode().getNodeName().equals("dcq:modified")) {
              Element element = (Element)node;
              System.out.println(element.getAttribute("rdf:value")); // for testing
              String dateModified = element.getAttribute("rdf:value");
            }
          }

         if (node.getNodeName().equals("rdf:li")) {
           Element element = (Element)node;
             //System.out.println("attr="+element.getAttribute("xml:lang"));
             //System.out.println("hasChildNodes="+node.hasChildNodes());
             NodeList nl=node.getChildNodes();
             for(int k=0;k<nl.getLength();k++){
               if((nl.item(k)).getNodeType()==Node.TEXT_NODE)
               	print((nl.item(k)));
             }
           if (element.hasAttribute("xml:lang")) {
              System.out.println(node.getNodeValue());
           }
         }

           arbeite(node.getChildNodes());
           break;
        }

        default: {
//          System.out.println("Default");
        }
      }
    }
  }
  
  public static void print(Node n){
  
  	 System.out.println(n.getNodeValue());
  }
/*
 public static String getAuthor1() {
   return author1;
 }

 public static String getAuthor2() {
   return author2;
 }

 public static String getFullTextSrc() {
   return fullTextSrc;
 }

 public static String getDateModified() {
   return dateModified;
 }

 public static String getDateCreated() {
   return dateCreated;
 }

 public static String getTitle() {
   return title;
 }
*/
  public static void main(String[] argv) {
   // String filename=argv[0];
  	String filename="d:/XMLFiles/test.xml";
    String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.DOMParser";
    DOMParserSaveEncoding parser;

    try {
    parser = new DOMParserSaveEncoding();
//    ef.resetErrors();
//    parser.setErrorHandler(ef);
    parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false); // otherwise parser.getCurrentNode() == null
    parser.setFeature("http://apache.org/xml/features/continue-after-fatal-error", true);
    parser.setFeature("http://apache.org/xml/features/allow-java-encodings", true);
    parser.parse(filename);
    Document document = parser.getDocument();
    System.out.println("Doc="+document);
    NodeList nodes = document.getChildNodes();
    arbeite(nodes);
  } catch (Exception ex) {
     System.err.println(ex.getMessage());
     ex.printStackTrace();
  }
    
  }

//  ErrorStorer ef;
}

