Foros del Web » Programación para mayores de 30 ;) » Java »

Parsear HTML a DOM Document

Estas en el tema de Parsear HTML a DOM Document en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/10/2009, 05:59
 
Fecha de Ingreso: octubre-2009
Mensajes: 11
Antigüedad: 14 años, 6 meses
Puntos: 0
Parsear HTML a DOM Document

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.
  #2 (permalink)  
Antiguo 28/10/2009, 06:32
 
Fecha de Ingreso: febrero-2009
Mensajes: 102
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Parsear HTML a DOM Document

EDIT: Perdón me he confundido con la respuesta y no sé como se borra.
  #3 (permalink)  
Antiguo 28/10/2009, 07:12
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Parsear HTML a DOM Document

Hola.

Lamentablemente, es imposible realizar un Parser de un XML mal formado.

Para empezar, debería fallarte, según el código que pones, la etiqueta META, antes que la de script, pero bueno, eso es otra historia.


Yo probaría con la clase HTMLEditorKit.Parser (ojo al punto, es una clase anidada).

Echa un vistazo al Javadoc de la clase para ver de qué va todo esto...

A ver si sirve. Recuerdo que había una que sí... pero no sé si era esta.

Lo miraré.


Un saludo.


Edit: Confirmo, efectivamente, es esa clase.
Un saludo.

Última edición por tistklehoff; 28/10/2009 a las 07:18 Razón: Confirmación
  #4 (permalink)  
Antiguo 29/10/2009, 04:55
 
Fecha de Ingreso: octubre-2009
Mensajes: 11
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Parsear HTML a DOM Document

Gracias tistklehoff, lo he estado mirando, pero no parece que luego lo pueda utilizar con XPath. Me ha dicho que mire Jtidy, a ver si me sirve para corregir el HTML.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:12.