2009-08-18 72 views
1

我想驗證用戶提供的XPath查詢以確保它在語法上是正確的。驗證XPath表達式

在沒有XML文檔的情況下「驗證」XPath查詢有意義嗎?

我該如何在libxml中實現這樣的事情?

回答

4

您可以使用libxml編譯XPath表達式而不對其進行評估。見xmlXPathCompile。無效表達式的返回值應爲NULL。

#include <stdio.h> 
#include <libxml/xpath.h> 
#include <libxml/xmlerror.h> 

void 
handle_structured_error(void *userdata, xmlErrorPtr err) 
{ 
    printf("%s", err->message); 
} 


int 
main(int argc, char **argv) 
{ 
    if (argc < 2) 
    return 1; 
    const char *expr = argv[1]; 
    xmlXPathContextPtr ctx = xmlXPathNewContext(NULL); 

    xmlSetStructuredErrorFunc(ctx, &handle_structured_error); 
    xmlXPathCompExprPtr p = xmlXPathCtxtCompile(ctx, (xmlChar *)expr); 


    if (p) { 
    printf("Valid: %s\n", expr); 
    xmlXPathFreeCompExpr(p); 
    } else { 
    printf("Invalid: %s\n", expr); 
    } 
    xmlXPathFreeContext(ctx); 
    return 0; 
} 
+0

如何向用戶顯示描述如何在返回NULL時解決問題的消息? 使用xmlXPathEvalExpression時,將打印一條錯誤消息,顯示語法不正確的位置。 – user128026 2009-08-19 00:16:10

+0

請記住,我不能使用xmlXPathEvalExpression,因爲在程序 – user128026 2009-08-19 00:17:00

+0

的這一階段沒有xmlXPathContext請參閱我的答案:使用xmlXPathCompile,而不是xmlXPathEvalExpression。你根本不需要一個xmlXPathContext。 – p00ya 2009-08-19 03:10:13