Jsoup检查字符串是否是有效的HTML

我遇到了Jsoup解析器的困难。 如何判断给定的字符串是否是有效的HTML代码?

String input = "Your vote was successfully added." boolean isValid = Jsoup.isValid(input); // isValid = true 

isValid标志是真的,因为Jsoup首先使用HtmlTreeBuilder:如果没有html,head或body标签丢失,它会自己添加它们。 然后它使用Cleaner类并根据给定的Whitelist进行检查。

有没有简单的方法来检查字符串是否是一个有效的HTML而没有Jsoup尝试使其成为HTML?

我的例子是AJAX响应,它是“text / html”内容类型。 然后它转到解析器,Jsoup添加了这个标签,结果,响应没有正确显示。

谢谢你的帮助。

首先,Reuben提出的解决方案没有按预期工作。 必须使用Pattern.DOTALL标志编译模式。 输入HTML可能有(也可能会)新的线路标志等。

所以它应该是这样的:

 Pattern htmlPattern = Pattern.compile(".*\\<[^>]+>.*", Pattern.DOTALL); boolean isHTML = htmlPattern.matcher(input).matches(); 

我也认为这种模式不仅应该找到HTML标签。 下一个:不是唯一有效的选项。 也可能有属性即。 这也必须处理。

我选择修改Jsoup源代码。 如果HTMLTreeBuilder(实际上是状态BeforeHtml )尝试添加元素我抛出ParseException然后我确定输入文件不是有效的HTML文件。

使用正则表达式检查String包含HTML

 boolean isHTML = input.matches(".*\\<[^>]+>.*"); 

如果您的String包含HTML值,那么它将返回true

 String input = "" ; 

但是这段代码String input = "Hello World <>"; 将返回false