Я использую 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 из-за: ожидалось ")", найдено ""

Могу ли я получить дополнительную информацию об ошибках синтаксиса XPath из LibXML2?

0
Danny Holstein 10 Фев 2021 в 19:27

1 ответ

Лучший ответ

Соответствующую часть исходного кода можно найти в {{X0 }}:

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

Так что ответ отрицательный. Код ошибки - это вся информация, которую предоставляет синтаксический анализатор выражений XPath libxml2.

1
nwellnhof 11 Фев 2021 в 13:43