1

ユーザー提供の XPath クエリを検証して、構文的に正しいことを確認したいと考えています。

XML ドキュメントなしで XPath クエリを "検証" することは理にかなっていますか?

どうすればlibxmlでそのようなことを達成できますか?

4

1 に答える 1

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;
}
于 2009-08-18T06:29:49.257 に答える