2010-06-23 7 views
5

Ho un progetto che genera pagine HTML utilizzando un modello Velocity e Java. Ma la maggior parte delle pagine non sono conformi agli standard W3C. Come posso convalidare quelle pagine HTML e ottenere un registro che mi dice quali errori/avvisi su quali pagine?Come verificare che l'HTML corrisponda agli standard W3C

Quindi posso correggere gli errori manualmente. Ho provato JTidyFilter, ma questo non funziona per me.

risposta

0

Dopo approfondite ricerche e un po 'di codice po' hack, sono riuscito a utilizzare JTidyFilter nel mio progetto, e sta funzionando in modo bello ora. JTidyFilter è in JTidyServlet che è un sottoprogetto di JTidy scritto circa cinque anni fa. Recentemente hanno aggiornato i codici per conformarsi al compilatore Java 5. Ho scaricato i loro codici, aggiornato alcune dipendenze e, soprattutto, ho cambiato alcune righe nella classe JTidyFilter che gestisce il filtro e finalmente ho funzionato bene nel mio progetto.

Ci sono ancora alcuni problemi nella riformattazione dell'HTML, perché posso vedere uno o due errori quando uso il plugin di convalida HTML di Firefox, ma altrimenti la maggior parte delle pagine supera la convalida.

2

Esiste anche un'API sperimentale disponibile da W3C per automatizzare la convalida. Chiedono gentilmente di limitare le richieste e offrono anche istruzioni sulla configurazione di un validatore su un server locale. È sicuramente più lavoro, ma se stai generando molte pagine HTML, probabilmente avrebbe senso anche automatizzare la validazione.

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

+1

Sono sorpreso che non ci sono API per Java. A parte questo, non voglio veramente modificare il mio codice sorgente per aggiungere le API. Tutto quello che voglio fare è cambiare il file di configurazione nel mio progetto J2EE in modo che possa accenderlo in fase di sviluppo e spegnerlo quando non lo faccio. bisogno di essa. – newguy

+0

vedere soluzioni Java in altre risposte –

0

L'API ufficiale al

permette di chiamare un W3C Checker locale o remoto via Markup Validator Web Service API dal 2007.

ha una singola soluzione Java Class che utilizza Jersey e moxy-Jaxb per leggere nella risposta SOAP.

questa è la dipendenza Maven per usarlo:

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

Ecco un test JUnit per provarlo:

/** 
* 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 

mostra come eseguire il vostro su validatore w3c su un sistema Ubuntu Linux.

Problemi correlati