【问题标题】:Validate XPath expression验证 XPath 表达式
【发布时间】:2010-11-20 11:32:00
【问题描述】:

我想验证用户提供的 XPath 查询以确保它在语法上是正确的。

在没有 XML 文档的情况下“验证”XPath 查询有意义吗?

如何在 libxml 中实现这样的事情?

【问题讨论】:

    标签: xml validation xpath libxml2


    【解决方案1】:

    您可以使用 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;
    }
    

    【讨论】:

    • 如何向用户显示一条消息,描述如何在返回 NULL 时解决问题?使用 xmlXPathEvalExpression 时会打印一条错误消息,显示语法不正确的位置。
    • 请记住,我不能使用 xmlXPathEvalExpression,因为在程序的这个阶段没有 xmlXPathContext
    • 查看我的答案:使用 xmlXPathCompile,而不是 xmlXPathEvalExpression。您根本不需要 xmlXPathContext。
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多