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