Handling Document Node, Element Node and Text Node


   static float grades[][] = new float[100][5];
   static int nstudent = 0;
   static int gi = -1;

   private static void traverse_tree(Node node)
   {
      if(node == null) {
         return;
      }
      int type = node.getNodeType();
      switch (type) {
         case Node.DOCUMENT_NODE: {
            traverse_tree(((Document)node).getDocumentElement());
            break;
         }
         case Node.ELEMENT_NODE: {
            String elementName = node.getNodeName();
            gi = -1;
            if(elementName.equals("hw1"))
               gi = 0;
            else if(elementName.equals("hw2"))
               gi = 1;
            else if(elementName.equals("project"))
               gi = 2;
            else if(elementName.equals("final"))
               gi = 3;
            else if(elementName.equals("student"))
               nstudent++;

            NodeList childNodes = node.getChildNodes();	
            if(childNodes != null) {
               int length = childNodes.getLength();
               for (int loopIndex = 0; loopIndex < length ; loopIndex++)
               {
                  traverse_tree(childNodes.item(loopIndex));
               }
            }
            break;
         }
         case Node.TEXT_NODE: {
            String chData = node.getNodeValue().trim();
            if(chData.indexOf("\n") < 0 && chData.length() > 0) {
               if(gi >= 0)
               grades[nstudent-1][gi] = Integer.parseInt(chData);
            }
         }
      }
   }