Я хотел бы проверить предоставленный пользователем запрос XPath, чтобы убедиться, что он синтаксически правильный.
Имеет ли смысл «проверять» запрос XPath без XML-документа?
Как я могу добиться этого в libxml?
Я хотел бы проверить предоставленный пользователем запрос XPath, чтобы убедиться, что он синтаксически правильный.
Имеет ли смысл «проверять» запрос XPath без XML-документа?
Как я могу добиться этого в libxml?
Вы можете скомпилировать выражение XPath с помощью libxml, не оценивая его. См. 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;
}