我想验证用户提供的XPath查询,以确保它在语法上是正确的。
在没有XML文档的情况下“验证”XPath查询是否有意义?
我如何在libxml中实现这样的功能?
答案 0 :(得分: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;
}