我正在尝试使用正则表达式比较 2 个 XForm 节点。例如,
- 节点 1 是 /data/Q1
- 节点 2 是 /data/Q2
我想要做的是在节点 2 中放置一个约束,说节点 2 的值不能大于节点 1 中的值。我将以下语句放在绑定元素中:
constraint=regex(/data/Q1 >= /data/Q2)
但这不起作用。
无论如何我可以让正则表达式从以前的节点读取一个值吗?
我正在尝试使用正则表达式比较 2 个 XForm 节点。例如,
我想要做的是在节点 2 中放置一个约束,说节点 2 的值不能大于节点 1 中的值。我将以下语句放在绑定元素中:
constraint=regex(/data/Q1 >= /data/Q2)
但这不起作用。
无论如何我可以让正则表达式从以前的节点读取一个值吗?
regex()
在 xpath 或 xforms 中没有定义命名的函数。因此,如果这不是特定于实现的功能(如果是 - 请将您正在使用的 xforms 引擎添加到您的问题中),即使使用有效的正则表达式,该约束也将不起作用。如果要检查节点的值是否与正则表达式匹配,则应使用matches()
XPath 中的函数。
有了这个matches()
函数,应该可以使用 XPath 作为函数的参数。假设节点/data/pattern
包含一个有效的正则表达式模式作为字符串,并且/data/value
具有检查它是否与该模式匹配的值,matches(/data/value, /data/pattern)
应该可以工作。您甚至可以将其放入:的constraint
属性中。xforms:bind
constraint="matches(/data/value, /data/pattern)"
通常,正如 Martin 评论的那样,您不需要该matches()
函数来进行两个节点的简单值比较。只需使用XPath 中可用的常用比较表达式。