【问题标题】:does libxml2 have available a description of XPath syntax error (XML_XPATH_EXPR_ERROR)libxml2 是否有可用的 XPath 语法错误描述 (XML_XPATH_EXPR_ERROR)
【发布时间】:2021-02-10 16:27:38
【问题描述】:

我正在我的代码中实现 LibXML2 XPath。

MSEXPORT int GetXpathXML(xmlDocPtr doc, xmlNodePtr node, xmlChar* xpathExpr, NodeRefsHdl NodeRefs)
{
#define ERR_OUT(x) {xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); return x;}
  if (doc == NULL) return(-1);

  /* Create xpath evaluation context */
  xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc);
  if(xpathCtx == NULL) return(-2);

  /* Evaluate xpath expression. */
  xmlXPathObjectPtr xpathObj = xmlXPathNodeEval((node == NULL ? xmlDocGetRootElement(doc): node), xpathExpr, xpathCtx);

  if(xpathObj == NULL) {
      snprintf(dan, BUFSZ, "Error %d: unable to evaluate xpath expression \"%s\"\n", (int) (xpathCtx->error), xpathExpr); DEBUG_MSG(dan);
      ERR_OUT(-3);
  }

当我故意发送这个错误的 XPath 时:

/*/*(1

(xpathCtx->error) 产生 0 并且 xmlGetLastError() 产生我 XML_XPATH_EXPR_ERROR

但是氧气给了我:

XPath 失败,原因是:预期的“)”,找到了“

我可以从 LibXML2 中检索更多 XPath 语法错误信息吗?

【问题讨论】:

    标签: xml xpath libxml2


    【解决方案1】:

    相关部分源码可以在xmlXPathCompPrimaryExpr找到:

        if (CUR != ')') {
            XP_ERROR(XPATH_EXPR_ERROR);
        }
    

    所以答案是否定的。错误码是 libxml2 的 XPath 表达式解析器提供的所有信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多