001 import java.io.IOException; 002 003 import org.w3c.dom.Document; 004 import org.w3c.dom.Node; 005 006 import fi.iki.hsivonen.xml.DOMUtils; 007 import fi.iki.hsivonen.xml.PrudentHttpEntityResolver; 008 009 public class DomTester { 010 static { 011 PrudentHttpEntityResolver.setParams(5000, 5000, 100); 012 PrudentHttpEntityResolver.setUserAgent(System.getProperty("fi.iki.hsivonen.verifierservlet.version", "VerifierServlet-RELAX-NG-Validator/2.x (http://hsivonen.iki.fi/validator/)")); 013 } 014 015 private static final void traverse(Node node) { 016 Node current = node; 017 Node next; 018 for (;;) { 019 switch (current.getNodeType()) { 020 case Node.TEXT_NODE: 021 case Node.CDATA_SECTION_NODE: 022 System.out.println(current.getNodeValue()); 023 break; 024 case Node.ELEMENT_NODE: 025 case Node.DOCUMENT_FRAGMENT_NODE: 026 case Node.DOCUMENT_NODE: 027 if ((next = current.getFirstChild()) != null) { 028 current = next; 029 continue; 030 } 031 break; 032 } 033 for (;;) { 034 if ((next = current.getNextSibling()) != null) { 035 current = next; 036 break; 037 } 038 current = current.getParentNode(); 039 if (current == node) { 040 return; 041 } 042 } 043 } 044 } 045 046 /** 047 * @param args 048 * @throws IOException 049 * @throws Exception 050 */ 051 public static void main(String[] args) throws Exception, IOException { 052 Document doc = DOMUtils.loadFromUrl("http://whatwg.org/specs/web-apps/current-work/"); 053 long start = System.currentTimeMillis(); 054 for (int i = 0; i < 1000; i++) { 055 traverse(doc); 056 } 057 System.out.println((System.currentTimeMillis() - start)); 058 } 059 060 }