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