public Object readPropertyNode(Element node) throws Exception {
      Object               result;
      Object               value;
      String               parentClass;
      String               property;
      Vector               children;
      Element              child;
      int                  i;
      Class                cls;

      // for debugging only
      if (DEBUG)
         trace(new Throwable(), node.getAttribute(ATT_NAME));

      m_CurrentNode = node;
      
      result      = null;

      children    = XMLDocument.getChildTags(node);
      value       = null;
      parentClass = null;
      property    = null;
      
      for (i = 0; i < children.size(); i++) {
         child = (Element) children.get(i);
         
         if (child.getAttribute(ATT_NAME).equals(NAME_PROPERTYNODE_VALUE)) {
            if (stringToBoolean(child.getAttribute(ATT_PRIMITIVE)))
               value = getPrimitive(child);
            else
               value = invokeReadFromXML(child);
         }
         if (child.getAttribute(ATT_NAME).equals(NAME_PROPERTYNODE_PARENTCLASS))
            parentClass = XMLDocument.getContent(child);
         if (child.getAttribute(ATT_NAME).equals(NAME_PROPERTYNODE_PROPERTY))
            property = XMLDocument.getContent(child);
      }
      
      if (parentClass != null)
         cls = Class.forName(parentClass);
      else
         cls = null;
      
      if (cls != null)
         result = new PropertyNode(value, new PropertyDescriptor(property, cls), cls);
      else
         result = new PropertyNode(value);
      
      return result;
   }