es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con la expresión en la biblioteca xPath jsel.

Tengo un problema con jsel, una biblioteca que utiliza expresiones xPath para evaluar datos.
Estoy tratando de validar esta expresión: ‘//Pregnancy != true()’ con respecto a un objeto de datos y siempre obtengo false como resultado. Por ejemplo, la expresión ‘//Sex != “f”‘ funciona perfectamente. Estoy utilizando un esquema personalizado para el objeto dom de jsel. La pregunta es, ¿por qué ‘//Pregnancy != true()’ nunca devuelve true si Pregnancy es ‘false’ o false o null?

const data = {
   "DoBirth": {
      "value": null,
      "unit": null,
      "isUnknown": false
   },
   "Sex": {
      "value": "m",
      "unit": null,
      "isUnknown": false
   },
   "Pregnancy": {
      "value": false,
      "unit": null,
      "isUnknown": false,
   }
}

const schema = {
   nodeValue: function (node) {
      if (node['value'] != undefined) {
         return node['value'];
      }
      return node;
   }
}

const dom = jsel(formData);
dom.schema(schema)

const result = dom.select('//Pregnancy != true()')

//resultado = siempre false
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en expresiones de JavaScript y XPath, parece que puede haber un problema con la forma en que se evalúa la expresión ‘//Embarazo != true()’ en relación con el objeto de datos proporcionado. Se está utilizando el esquema personalizado para el objeto DOM jsel, lo cual puede estar contribuyendo al problema.

    Es posible que la expresión no esté devolviendo verdadero cuando Embarazo es falso, falso o nulo porque el operador booleano utilizado no es equivalente a los valores que se están comparando. En este caso, se está utilizando el operador de desigualdad (!=) para comparar Embarazo con el valor true(). Sin embargo, dado que Embarazo es un valor booleano, puede ser más apropiado utilizar la función not() en la expresión en su lugar.

    Una posible solución sería modificar la expresión para que diga: ‘not(//Embarazo)’, lo cual debería devolver verdadero si Embarazo es falso o nulo, y falso si Embarazo es verdadero. Además, si el esquema personalizado está causando resultados inesperados, puede valer la pena revisarlo para asegurarse de que refleje correctamente la estructura del objeto de datos que se está utilizando.

Comments are closed.