Java XML Editor

Introduction:
	The Java XML editor uses a SAX2 parser to parse an XML document (String, InputSource, text file) and produce a Java Swing DefaultTreeModel object. This DefaultTreeNode is basically just a set of DefaultMutableTreeNode objects connected in a manner to match the XML hierarchy. A DefaultMutableTreeNode object is created for each element in the original XML document when the XML document is parsed. (Note that although these Java classes are part of the Swing classes, they are generic objects and not visual components.)
	The DefaultMutableTreeNode is a general purpose node for use in tree-type data structures. It is similar (but NOT identical) to the DOM Node object. A DefaultMutableTreeNode object can have a 'UserObject' associated with it. In this case, a NodeInfo object is assigned to each DefaultMutableTreeNode. This NodeInfo object includes all the information associated with a node in the tree. This includes the node name, node icon, etc. There is a hashtable within the NodeInfo object which can include any number of named objects. All XML attribute information associated with a node is stored in that hashtable, and various formatting information can also be stored in that hashtable.     
	Once the DefaultTreeModel is created, a JTree can easily be created to display the tree as an outline. There is also an XMLPanels class that uses the DefaultTreeModel information for creating a 'nested panel' view of the tree. This class also allows for the 'custom editors' for certain nodes in the tree structure. If there is no custom editor, XMLPanels just recursively creates nest panels down to a text node which is displayed in a TextField box. This allows the editing of arbitrary text data. 
	If a custom editor is defined for a node, then XMLPanels just uses the defined editor to create the panel represented by the node. The editor class is assumed to extend JPanel (i.e. it is a panel) and hava a constructor which takes a DefaultMutableTreeNode as an input. Note that passing the editor a DefaultMutableTreeNode gives it access to the NodeInfo for the node plus access to all other nodes in the data tree through its links to parent and child nodes. The editor node 'records' editing results in the DefaultMutableTreeNode object so it is immediatly available to the tree data structure. The editor class is passed to XMLPanels through a string name so that XMLPanels can dynamically load it. Currently, an XML attribute is used to pass the editor name. This attribute could be added to known XML Doctypes using an XSLT transformation or one could let XMLPanel examine the path and look elsewhere for possible editor classes.