Java 如何验证JSoup选择字符串
我正在开发一个程序,让用户有机会定义自己的选择字符串。例如,在表达式中:Java 如何验证JSoup选择字符串,java,validation,selector,jsoup,Java,Validation,Selector,Jsoup,我正在开发一个程序,让用户有机会定义自己的选择字符串。例如,在表达式中: doc.select("a[href]"); 用户将指定“a[href]”部分。现在我的问题是,如何检查传入的字符串是否是有效的JSoup选择器字符串?有人知道如何验证这一点吗 任何帮助都将不胜感激 感谢检查jsoup源代码:您可以使用。选择器正在使用非公共的QueryParser,但您也可以“检查”它。方法1:编辑Jsoup源代码,将解析器公开,或在那里实现您自己的方法 方法2:解析一个简单的伪元素并捕获异常。如果抛出
doc.select("a[href]");
用户将指定“a[href]”部分。现在我的问题是,如何检查传入的字符串是否是有效的JSoup选择器字符串?有人知道如何验证这一点吗
任何帮助都将不胜感激
感谢检查jsoup源代码:您可以使用。选择器正在使用非公共的QueryParser,但您也可以“检查”它。方法1:编辑Jsoup源代码,将解析器公开,或在那里实现您自己的方法 方法2:解析一个简单的伪元素并捕获异常。如果抛出一个:查询无效,否则就可以了。这不是最好的解决方案,但很有效 下面是一个例子: 测试: 测试结果:
我目前使用的方法与您建议的方法类似,但希望搜索更高效的内容。您知道,截至2019年,Jsoup是否发布了任何公共方法或类来处理此问题吗?
private static final Element dummy = new Element(Tag.valueOf("p"), ""); // used for "testparsing"
// ...
public static boolean isValid(String query)
{
if( query == null ) // Check for null
return false;
try
{
Selector.select(query, dummy); // Use the querystring on the dummy - returnvalue is not relevant
}
catch( Selector.SelectorParseException | IllegalArgumentException ex ) // these exceptions are thrown if something is not ok
{
return false; // If something is not ok, the query is invalid
}
return true; // All ok, query is valid
}
System.out.println(isValid(null)); // not valid
System.out.println(isValid("div.abc")); // valid
System.out.println(isValid("p[")); // not valid
System.out.println(isValid("a:matchesxy")); // not valid
System.out.println(isValid("div > a")); // valid
false
true
false
false
true