title: What HTML parser can tidy up this code?
body: <p>I'm using Java 6.  I want to find a tool that can clean up ugly HTML.  Specifically, I would like a tool that could deal with the following ...</p>
  
  <pre><code>&lt;script type="text/javascript"&gt;
      document.write(
       '&lt;scr'+'ipt src="http://ox-d.journatic.com/w/1.0/jstag"&gt;&lt;\/scr'+'ipt&gt;');
  &lt;/script&gt;
  </code></pre>
  
  <p>I have tried JSoup v 1.6.2 to deal with the above, but running the above code using</p>
  
  <pre><code>final org.jsoup.nodes.Document doc = Jsoup.parse(html);
  final String formattedHtml = doc.toString();
  </code></pre>
  
  <p>returns the same code.  THe problem with the above is taht when I try and parse it with</p>
  
  <pre><code>DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  final DocumentBuilder builder = factory.newDocumentBuilder();
  final InputSource s = new InputSource(new StringReader(cleanedUpHtml));
  org.w3c.dom.Document result = builder.parse(s);
  </code></pre>
  
  <p>I get the exception ...</p>
  
  <pre><code>org.xml.sax.SAXParseException: Element type "scr" must be followed by either attribute specifications, "&gt;" or "/&gt;".
      at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
      at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
      at com.myco.myproject.util.XmlUtilities.getStringAsDocument(XmlUtilities.java:146)
      at com.myco.myproject.util.NetUtilities.getUrlAsDocument(NetUtilities.java:54)
      at com.myco.myproject.parsers.impl.AbstractMetromixParser.parsePage(AbstractMetromixParser.java:107)
      at com.myco.myproject.parsers.impl.AbstractMetromixParser.getEvents(AbstractMetromixParser.java:76)
      at com.myco.myproject.domain.EventFeed.refresh(EventFeed.java:81)
      at com.myco.myproject.domain.EventFeed.getEvents(EventFeed.java:72)
      at com.myco.myproject.parsers.impl.MetromixParserTest.testParser(MetromixParserTest.java:21)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
      at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
      at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
      at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
      at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
      at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
      at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
      at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
      at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  </code></pre>
  
  <p>Any suggestions on an HTML parser that can tidy up the above? - Dave</p>