我想验证用户提供的 XPath 查询以确保它在语法上是正确的。
在没有 XML 文档的情况下“验证”XPath 查询是否有意义?
我怎样才能在 libxml 中实现这样的事情?
我想验证用户提供的 XPath 查询以确保它在语法上是正确的。
在没有 XML 文档的情况下“验证”XPath 查询是否有意义?
我怎样才能在 libxml 中实现这样的事情?
您可以使用 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;
}