将XForm节点放在正则表达式中

时间:2012-05-31 10:08:12

标签: regex validation xpath xforms

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

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

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

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

但这不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

使用matches()函数,应该可以使用XPath作为函数的参数。假设节点/data/pattern包含有效的正则表达式模式作为字符串,并且/data/value具有检查它是否与该模式匹配的值,matches(/data/value, /data/pattern)应该有效。您甚至可以将其放入constraintxforms:bind的{​​{1}}属性中。

通常,正如Martin评论的那样,对于两个节点的简单值比较,您不需要constraint="matches(/data/value, /data/pattern)"函数。只需使用XPath中常用的comparison expressions