1

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

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

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

任何帮助将不胜感激。

谢谢

4

2 回答 2

3

方法 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

测试结果:

false
true
false
false
true
于 2013-02-12T18:16:12.067 回答
1

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

于 2013-02-12T14:48:51.160 回答