2013-02-12 87 views
1

我正在研究一個讓用戶有機會定義他自己的選擇字符串的程序。例如,在表達式:如何驗證JSoup選擇字符串

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

用戶將已指定的「一個[HREF]」的一部分。現在我的問題是,我如何檢查傳入的字符串是否是有效的JSoup選擇器字符串?有誰知道如何驗證?

任何幫助將非常感激。

感謝

回答

1

方法1:編輯Jsoup源,使公衆分析器或實現自己的方法有

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

檢查jsoup來源:您可以使用Selector。選擇器使用的是不公開的QueryParser,但你也可以「檢查」它。