2013-02-12 2 views
1

사용자가 자신의 선택 문자열을 정의 할 수있는 프로그램을 만들고 있습니다. 예를 들면 다음과 같습니다.JSoup 선택 문자열 유효성을 검사하는 방법

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

사용자는 "a [href]"부분을 지정했을 것입니다. 이제 내 질문에, 문자열에 전달 된 JSoup 선택기 문자열이 유효한지 어떻게 확인할 수 있습니까? 아무도 이것을 확인하는 방법을 알고 있습니까?

도움이 될 것입니다.

감사 jsoup 소스에 대한

답변

1

방법 1 : 편집 Jsoup 소스와는 파서를 공개하거나 거기에 자신 만의 방법을 구현

방법 2 : 간단한 더미 요소를 구문 분석 예외를 잡을 수있어. throw되는 경우 : 쿼리가 유효하지 않습니다. 그렇지 않으면 괜찮습니다. 최고의 솔루션은 아니지만 작동합니다.

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

확인 : 당신이 Selector를 사용할 수 있습니다. 선택기가 공개되지 않은 QueryParser를 사용하고 있지만 "확인"할 수도 있습니다.

관련 문제