Как проверить, что HTML соответствует стандартам W3C - PullRequest
5 голосов
/ 23 июня 2010

У меня есть проект, который генерирует HTML-страницы с использованием шаблона Velocity и Java.Но большинство страниц не соответствуют стандартам W3C .Как я могу проверить эти HTML-страницы и получить журнал, сообщающий мне, какие ошибки / предупреждения на каких страницах?

Затем я могу исправить ошибки вручную.Я пробовал JTidyFilter, но у меня это не работает.

Ответы [ 4 ]

5 голосов
/ 26 февраля 2012

Вы можете использовать валидатор W3C непосредственно из Java, см. w3c-jabi .

2 голосов
/ 23 июня 2010

W3C также предлагает экспериментальный API для автоматизации проверки. Они просят вас ограничить запросы, а также предлагают инструкции по настройке валидатора на локальном сервере. Это определенно больше работы, но если вы генерируете много HTML-страниц, возможно, имеет смысл также автоматизировать проверку.

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

0 голосов
/ 22 сентября 2014

Официальный API на

позволяет вызывать локальную или удаленную проверку W3C через API веб-службы Markup Validator с 2007 года.

имеет единственное решение класса Java, использующее Джерси и moxy-Jaxb для чтения в ответе SOAP.

Это зависимость от Maven:

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

Вот тест JUnit для его тестирования:

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

показывает, как запустить ваш валидатор W3C в системе Ubuntu Linux.

0 голосов
/ 22 июля 2010

После обширных исследований и небольшого взлома кода мне удалось использовать JTidyFilter в моем проекте, и теперь он прекрасно работает.JTidyFilter находится в JTidyServlet, который является подпроектом JTidy, написанным около пяти лет назад.Недавно они обновили коды для соответствия компилятору Java 5.Я скачал их коды, обновил некоторые зависимости и, самое главное, изменил некоторые строки в классе JTidyFilter, который обрабатывает фильтр, и, наконец, получил его в своем проекте.Я вижу одну или две ошибки, когда использую плагин проверки HTML Firefox, но в остальном большинство страниц проходят проверку.

...