ユーザー提供の 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;
}