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

时间:2014-01-20 12:15:10

标签: java jsoup

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

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

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

有没有简单的方法可以检查字符串是否是有效的HTML而没有Jsoup尝试将其设为HTML?

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

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

所以它应该是这样的:

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

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

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

答案 1 :(得分:2)

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

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

如果您的String包含HTML值,则会返回true

String input = "<html><body></body></html>" ;

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