如何使用java验证html?使用 jsoup 库时遇到问题

问题描述 投票:0回答:2

我需要使用 java 验证 HTML。所以我尝试使用 jsoup 库。但我的一些测试用例失败了。

例如,这是我的 html 内容。我对此内容没有任何控制权。我从一些外部来源提供商那里得到这个。

String invalidHtml = "<div id=\"myDivId\" ' class = claasnamee value='undaa' > <<p> p tagil vanne <br> <span> span close cheythillee!!  </p> </div>";

doc = Jsoup.parseBodyFragment(invalidHtml);

对于上面的 html,我得到了这个输出。

<html>
 <head></head>
 <body>
  <div id="myDivId"  '=""  class="claasnamee" value="undaa">
    &lt;
   <p> p tagil vanne <br /> <span> span close cheythillee!! </span></p> 
  </div>
 </body>
</html>

我上面的字符串中的单引号是这样的。那么我该如何解决这个问题呢。任何人都可以帮助我。

java html validation jsoup
2个回答
4
投票

验证 html 的最佳位置是 http://validator.w3.org/。但这将是手动过程。但不用担心 jsoup 也可以为您做到这一点。下面的程序就像一个解决方法,但它达到了目的。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupValidate {

    public static void main(String[] args) throws Exception {

        String invalidHtml = "<div id=\"myDivId\" ' class = claasnamee value='undaa' > <<p> p tagil vanne <br> <span> span close cheythillee!!  </p> </div>";

        Document initialDoc = Jsoup.parseBodyFragment(invalidHtml);

        Document validatedDoc = Jsoup.connect("http://validator.w3.org/check")
                .data("fragment", initialDoc.html())
                .data("st", "1")
                .post();

        System.out.println("******");
        System.out.println("Errors");
        System.out.println("******");
        for(Element error : validatedDoc.select("li.msg_err")){
            System.out.println(error.select("em").text() + " : " + error.select("span.msg").text());
        }

        System.out.println();
        System.out.println("**************");
        System.out.println("Cleaned output");
        System.out.println("**************");
        Document cleanedOuput = Jsoup.parse(validatedDoc.select("pre.source").text());
        cleanedOuput.select("meta[name=generator]").first().remove();
        cleanedOuput.outputSettings().indentAmount(4);
        cleanedOuput.outputSettings().prettyPrint(true);
        System.out.println(cleanedOuput.html());
    }

}

4
投票
var invalidHtml = "<div id=\"myDivId\" ' class = claasnamee value='undaa' > <<p> p tagil vanne <br> <span> span close cheythillee!!  </p> </div>";

var parser = Parser.htmlParser()
        .setTrackErrors(10); // Set the number of errors it can track. It's 0 by default so it's important to set that
var dom = Jsoup.parse(invalidHtml, "" /* this is the default */, parser);

var errors = parser.getErrors() // Do something with the errors, if any
© www.soinside.com 2019 - 2024. All rights reserved.