xPath jsel 库中的表达式问题

Problem with expression in xPath jsel library

我对 jsel 有疑问,jsel 是一个使用 xPath 表达式计算数据的库。 我正在尝试验证此表达式:'//Pregnancy != true()' 针对数据对象,我的结果始终为 false。例如,表达式 '//Sex != "f"' 很完美。我正在为 jsel dom 对象使用自定义架构。问题是,如果怀孕是 'false' 或假或空,为什么 '//Pregnancy != true()' 永远不会 returns true?

 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()')

//result = always false

在 XPath 1.0 中,//Pregnancy != true() 将节点集与布尔值进行比较,该比较的规则是它表示 boolean(//Pregnancy) != true(),仅当没有怀孕元素时才为真在文档中。

我实际上不知道 JSEL 如何将您的 Javascript 对象映射到 XML,但我想使用字符串 "true" 比使用布尔值 [=] 更可靠13=].

您还需要注意,在 XPath 中,如果 Sex 元素的值不是“f”,则 //Sex != "f" 为真。如果没有值为“f”的 Sex 元素,则您更可能需要 not(//Sex = "f")