package jp.gr.xml.relax.dom; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.Entity; import org.w3c.dom.EntityReference; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Notation; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; /** * UDOMVisitor * * @since Oct. 7, 2000 * @version Feb. 24, 2001 * @author ASAMI, Tomoharu (asami@zeomtech.com) */ public final class UDOMVisitor { public static void traverse( Node node, IDOMVisitor visitor ) throws DOMVisitorException { boolean doContinue; switch (node.getNodeType()) { case Node.ELEMENT_NODE: doContinue = visitor.enter((Element)node); break; case Node.ATTRIBUTE_NODE: doContinue = visitor.enter((Attr)node); break; case Node.TEXT_NODE: doContinue = visitor.enter((Text)node); break; case Node.CDATA_SECTION_NODE: doContinue = visitor.enter((CDATASection)node); break; case Node.ENTITY_REFERENCE_NODE: doContinue = visitor.enter((EntityReference)node); break; case Node.ENTITY_NODE: doContinue = visitor.enter((Entity)node); break; case Node.PROCESSING_INSTRUCTION_NODE: doContinue = visitor.enter((ProcessingInstruction)node); break; case Node.COMMENT_NODE: doContinue = visitor.enter((Comment)node); break; case Node.DOCUMENT_NODE: doContinue = visitor.enter((Document)node); break; case Node.DOCUMENT_TYPE_NODE: doContinue = visitor.enter((DocumentType)node); break; case Node.DOCUMENT_FRAGMENT_NODE: doContinue = visitor.enter((DocumentFragment)node); break; case Node.NOTATION_NODE: doContinue = visitor.enter((Notation)node); break; default: doContinue = visitor.enter(node); break; } if (doContinue) { traverseChildren(node, visitor); switch (node.getNodeType()) { case Node.ELEMENT_NODE: visitor.leave((Element)node); break; case Node.ATTRIBUTE_NODE: visitor.leave((Attr)node); break; case Node.TEXT_NODE: visitor.leave((Text)node); break; case Node.CDATA_SECTION_NODE: visitor.leave((CDATASection)node); break; case Node.ENTITY_REFERENCE_NODE: visitor.leave((EntityReference)node); break; case Node.ENTITY_NODE: visitor.leave((Entity)node); break; case Node.PROCESSING_INSTRUCTION_NODE: visitor.leave((ProcessingInstruction)node); break; case Node.COMMENT_NODE: visitor.leave((Comment)node); break; case Node.DOCUMENT_NODE: visitor.leave((Document)node); break; case Node.DOCUMENT_TYPE_NODE: visitor.leave((DocumentType)node); break; case Node.DOCUMENT_FRAGMENT_NODE: visitor.leave((DocumentFragment)node); break; case Node.NOTATION_NODE: visitor.leave((Notation)node); break; default: visitor.leave(node); break; } } } public static void traverseChildren(Node node, IDOMVisitor visitor) { NodeList children = node.getChildNodes(); int size = children.getLength(); for (int i = 0;i < size;i++) { traverse(children.item(i), visitor); } } }