0

我正在尝试使用正则表达式比较 2 个 XForm 节点。例如,

  • 节点 1 是 /data/Q1
  • 节点 2 是 /data/Q2

我想要做的是在节点 2 中放置一个约束,说节点 2 的值不能大于节点 1 中的值。我将以下语句放在绑定元素中:

constraint=regex(/data/Q1 >= /data/Q2)

但这不起作用。

无论如何我可以让正则表达式从以前的节点读取一个值吗?

4

1 回答 1

0

regex()在 xpath 或 xforms 中没有定义命名的函数。因此,如果这不是特定于实现的功能(如果是 - 请将您正在使用的 xforms 引擎添加到您的问题中),即使使用有效的正则表达式,该约束也将不起作用。如果要检查节点的值是否与正则表达式匹配,则应使用matches()XPath 中的函数。

有了这个matches()函数,应该可以使用 XPath 作为函数的参数。假设节点/data/pattern包含一个有效的正则表达式模式作为字符串,并且/data/value具有检查它是否与该模式匹配的值,matches(/data/value, /data/pattern)应该可以工作。您甚至可以将其放入:的constraint属性中。xforms:bindconstraint="matches(/data/value, /data/pattern)"

通常,正如 Martin 评论的那样,您不需要该matches()函数来进行两个节点的简单值比较。只需使用XPath 中可用的常用比较表达式。

于 2012-05-31T10:46:11.547 回答