Java jsoup-清理缺少和损坏标记的HTML

Java jsoup-清理缺少和损坏标记的HTML,java,html,jsoup,Java,Html,Jsoup,我正在寻找一种方法来清理HTML文本中可能有一些丢失或损坏的标记。这些代码通常是由非程序员编写的,HTML可能存在许多问题。以下是我尝试过的: Parser p = Parser.htmlParser(); String test = "Here is a <i>fake</> message.<br><b><i>- Publisher</b></i>"; Document d = p.parseInput(te

我正在寻找一种方法来清理HTML文本中可能有一些丢失或损坏的标记。这些代码通常是由非程序员编写的,HTML可能存在许多问题。以下是我尝试过的:

Parser p = Parser.htmlParser();
String test = "Here is a <i>fake</> message.<br><b><i>- Publisher</b></i>";
Document d = p.parseInput(test, StringUtils.EMPTY);
System.out.println("BEFORE: " + test);
System.out.println("JSPARSED: " + StringUtils.remove(d.body().html(), "\n"));
System.out.println("JSOUP: "+ Jsoup.clean(test, StringUtils.EMPTY, Whitelist.relaxed()));
Parser p=Parser.htmlParser();
String test=“这是一条假消息。
-Publisher”; 文档d=p.parseInput(test,StringUtils.EMPTY); System.out.println(“之前:+测试); System.out.println(“JSPARSED:+StringUtils.remove(d.body().html(),“\n”); System.out.println(“JSOUP:+JSOUP.clean(test,StringUtils.EMPTY,Whitelist.relaxed());
输出为:

BEFORE: Here is a <i>fake</> message.<br><b><i>- Publisher</b></i>
JSPARSED: Here is a <i>fake message.<br><b><i>- Publisher</i></b></i>
JSOUP: Here is a 
<i>fake message.<br><b><i>- Publisher</i></b></i>
BEFORE:这是一条假消息。
-Publisher JSPARSED:这是一条假消息。
-Publisher JSOUP:这里有一个 假消息。
-Publisher
所需输出为:

Here is a <i>fake</i> message.<br><b><i>- Publisher</i></b>
这是一条假消息。
-Publisher
是否可以使用jsoup清除上述情况下的HTML

编辑:为了添加更多的上下文,这个HTML块显示在我们的网站上,作为产品的描述。这通常是由营销团队或出版商编写的,有时HTML中会出现一些错误。我们目前使用JTidy进行HTML清理,然后再将其显示在网站上


我最近运行了一个程序,查看有多少产品在描述中有错误,发现大约30000个产品有错误。在回顾了其中一些错误后,我发现大多数错误是错误顺序的标记(程序修复了这些错误),但如示例所示,标记丢失或损坏的错误没有按预期修复。

自动更正30k格式错误的HTML片段,不太可能得到一致的结果。很可能,你会得到更糟糕的内容

帮自己一个忙:

  • 禁止以编程方式为新的/编辑的描述保存损坏的HTML
  • 请人手动纠正这些错误(或委托给将错误放在首位的营销团队)

我怀疑您会发现,很难确定以编程方式编写格式错误HTML的人的意图。如果你解释一下你想这样做的原因,也许有人会提出更好的解决方案?谢谢。这可能是最好的办法。