Hola a todos, necesito un parser para convertir un HTML (en string) a Document (org.w3c.dom.Document)
 
Os cuento la situación, para que lo entendáis mejor: 
En un String obtengo un código html que no está bien formado (quiero decir que puede haber etiquetas que faltan, por ejemplo </p>, que antes nadie las ponía). Tengo el siguiente método para pasar un String a org.w3c.dom.Document:  
Código:
 public static Document String2Document(String str) throws Exception {
    DocumentBuilder builder = 
        DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document dok = builder.parse(new InputSource(new StringReader(str)));
    return dok;
}
  Un caso concreto es cuando le meto el siguiente HMLT (solo pongo un trocito):  
Código:
 <html>
<head>
<title>Corpus arakatzailea</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="/klasikoak/kg.css">
<script LANGUAGE="JavaScript1.2" SRC="/klasikoak/scripts/menu.js"></SCRIPT>
</head>
<body>
.....
</body>
</html>
  Al parsearlo con la función, salta una excepción, por culpa de la etiqueta </SCRIPT>, diciendo que el elemento "script" debe terminar con la etiqueta </script>:  
Código:
 [Fatal Error] :1:235: The element type "script" must be terminated by the matching end-tag "</script>".
org.xml.sax.SAXParseException: The element type "script" must be terminated by the matching end-tag "</script>".
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
	at UtilidadesXML.String2Document(UtilidadesXML.java:56)
	at HTML2Document.main(HTML2Document.java:15)
  No quiero ni pensar lo que pasará con las demás etiquetas mal balanceadas. 
Alguien me puede ayudar?? 
Gracias de antemano.