如何验证JSoup选择字符串

时间:2013-02-12 12:45:51

标签: java validation selector jsoup

我正在开发一个程序,让用户有机会定义自己的选择字符串。例如,在表达式中:

doc.select("a[href]");

用户可以指定“a [href]”部分。现在我的问题是,如何检查传入的字符串是否是有效的JSoup选择器字符串?有谁知道如何验证这个?

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

检查jsoup来源:您可以使用Selector。 Selector使用的是QueryParser,它不是公共的,但您也可以“检查”它。

答案 1 :(得分:1)

方法1:编辑Jsoup源并将Parser公开或在那里实现自己的方法

方法2:解析一个简单的虚拟元素并捕获异常。如果抛出一个:查询无效,否则没关系。不是最好的解决方案,但它有效。

以下是一个例子:

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

TestResult中:

false
true
false
false
true