2010-06-23 19 views
5

Tengo un proyecto que genera páginas HTML usando una plantilla Velocity y Java. Pero la mayoría de las páginas no cumplen con los estándares W3C. ¿Cómo puedo validar esas páginas HTML y obtener un registro que me dice qué errores/advertencias en qué páginas?Cómo validar que HTML coincide con los estándares W3C

Luego puedo corregir los errores de forma manual. He intentado JTidyFilter, pero eso no funciona para mí.

Respuesta

0

Después de una extensa investigación y un pequeño programa de código poco, me he arreglado para utilizar JTidyFilter en mi proyecto, y está funcionando muy bien ahora. JTidyFilter está en JTidyServlet, que es un subproyecto de JTidy escrito hace unos cinco años. Recientemente actualizaron los códigos para cumplir con el compilador de Java 5. Descargué sus códigos, actualicé algunas dependencias y lo más importante, cambié algunas líneas en la clase JTidyFilter que maneja el filtro y finalmente lo conseguí en mi proyecto.

Todavía hay algunos problemas para reformatear el HTML, porque puedo ver uno o dos errores cuando uso el complemento de validación de Firefox HTML, pero de lo contrario la mayoría de las páginas pasan la validación.

2

También hay una API experimental disponible del W3C para ayudar a automatizar la validación. Le solicitan amablemente que acelere las solicitudes y también le ofrece instrucciones para configurar un validador en un servidor local. Definitivamente es más trabajo, pero si está generando muchas páginas HTML, probablemente también tenga sentido automatizar la validación.

http://validator.w3.org/docs/api.html

+1

Me sorprende que no haya API para Java. Aparte de eso, realmente no quiero modificar mi código fuente para agregar las API. Todo lo que quiero hacer es cambiar el archivo de configuración en mi proyecto J2EE para poder activarlo en el momento del desarrollo y desactivarlo cuando no lo haga. necesito. – newguy

+0

ver soluciones Java en otras respuestas –

0

La API oficial en

permite llamar a un inspector local o remoto W3C través de la API de servicios Web de marcado Validador desde 2007.

tiene una sola solución Java Class que usa Jersey y moxy-Jaxb para leer en la respuesta SOAP.

esta es la dependencia Maven para utilizarlo:

<dependency> 
    <groupId>com.bitplan</groupId> 
    <artifactId>w3cValidator</artifactId> 
    <version>0.0.2</version> 
</dependency> 

Aquí está una prueba unitaria para probarlo:

/** 
* the URL of the official W3C Markup Validation service 
* if you'd like to run the tests against your own installation you might want to modify this 
*/ 
public static final String url="http://validator.w3.org/check"; 

/** 
* test the w3cValidator interface with some html code 
* @throws Exception 
*/ 
@Test 
public void testW3CValidator() throws Exception { 
    String preamble="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n" + 
      " \"http://www.w3.org/TR/html4/loose.dtd\">\n"+ 
      "<html>\n"+ 
      " <head>\n"+ 
      " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n"+ 
      " <title>test</title>\n"+ 
      " </head>\n"+ 
      " <body>\n"; 
    String footer=" </body>\n"+ 
      "</html>\n"; 
    String[] htmls = { 
      preamble+ 
      " <div>\n"+ 
      footer, 
      "<!DOCTYPE html><html><head><title>test W3CChecker</title></head><body><div></body></html>" 
    }; 
    int[] expectedErrs={1,2}; 
    int[] expectedWarnings={1,2}; 
    int index=0; 
    System.out.println("Testing "+htmls.length+" html messages via "+url); 
    for (String html : htmls) { 
     W3CValidator checkResult = W3CValidator.check(url, html); 
     List<ValidationError> errlist = checkResult.body.response.errors.errorlist; 
     List<ValidationWarning> warnlist = checkResult.body.response.warnings.warninglist; 
     Object first = errlist.get(0); 
     assertTrue("if first is a string, than moxy is not activated",first instanceof ValidationError); 
     //System.out.println(first.getClass().getName()); 
     //System.out.println(first); 
     System.out.println("Validation result for test "+(index+1)+":"); 
     for (ValidationError err:errlist) { 
      System.out.println("\t"+err.toString()); 
     } 
     for (ValidationWarning warn:warnlist) { 
      System.out.println("\t"+warn.toString()); 
     } 
     System.out.println(); 
     assertTrue(errlist.size()>=expectedErrs[index]); 
     assertTrue(warnlist.size()>=expectedWarnings[index]); 
     index++; 
    } 
} // testW3CValidator 

muestra cómo ejecutar su en el validador w3c en un sistema Ubuntu Linux.

Cuestiones relacionadas