2010-06-23 9 views
5

Ich habe ein Projekt, das HTML-Seiten mit einer Velocity Vorlage und Java generiert. Die meisten Seiten entsprechen jedoch nicht den Standards W3C. Wie kann ich diese HTML-Seiten validieren und ein Protokoll erhalten, das mir sagt, welche Fehler/Warnungen auf welchen Seiten aufgetreten sind?Wie überprüft werden, dass HTML mit W3C-Standards übereinstimmt

Dann kann ich die Fehler manuell beheben. Ich habe versucht, JTidyFilter, aber das funktioniert nicht für mich.

Antwort

0

Nach umfangreichen Recherchen und ein wenig Code Hack, habe ich es geschafft JTidyFilter in meinem Projekt zu verwenden, und es ist sehr schön jetzt arbeiten. JTidyFilter befindet sich in JTidyServlet, einem Teilprojekt von JTidy, das vor etwa fünf Jahren geschrieben wurde. Vor kurzem haben sie die Codes aktualisiert, um dem Java 5-Compiler zu entsprechen. Ich habe ihre Codes heruntergeladen, einige Abhängigkeiten aktualisiert und vor allem einige Zeilen in der JTidyFilter-Klasse geändert, die den Filter behandelt und schließlich in meinem Projekt funktioniert.

Es gibt immer noch einige Probleme bei der Neuformatierung des HTML, da ich ein oder zwei Fehler sehen kann, wenn ich das HTML-Validierungs-Plugin von Firefox verwende, aber ansonsten bestehen die meisten Seiten die Validierung.

2

Es gibt auch eine experimentelle API von W3C, um die Validierung zu automatisieren. Sie bitten darum, dass Sie Anfragen abmildern und Anweisungen zum Einrichten eines Validators auf einem lokalen Server geben. Es ist definitiv mehr Arbeit, aber wenn Sie viele HTML-Seiten generieren, wäre es wahrscheinlich sinnvoll, auch die Validierung zu automatisieren.

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

+1

Ich bin überrascht, dass es keine API für Java gibt. Abgesehen davon möchte ich meinen Quellcode nicht wirklich ändern, um die APIs hinzuzufügen. Ich möchte lediglich die Konfigurationsdatei in meinem J2EE-Projekt ändern, damit ich sie zur Entwicklungszeit einschalten und ausschalten kann, wenn ich das nicht tue. brauchen. – newguy

+0

siehe Java-Lösungen in anderen Antworten –

0

Die offizielle API bei

ermöglicht über Markup Validator Web Service API seit 2007.

ein lokales oder entferntes W3C Checker aufrufen

verfügt über eine Java-Klassenlösung, die Jersey und Moxy-Jaxb verwendet, um die SOAP-Antwort einzulesen.

ist dies die Maven-Abhängigkeit, es zu benutzen:

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

Hier ist ein JUnit-Test es für den Versuch:

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

zeigt, wie Sie Ihre laufen auf W3C Validator auf einem Ubuntu Linux System.