旧版Orbeon Forms HTTP服务动态路径参数XPath取值问题
旧版Orbeon Forms HTTP服务动态路径参数配置方案
问题原因
各类XPath写法不生效的核心原因是HTTP服务的资源URL配置项中,XPath默认执行上下文不在表单数据实例根节点下,直接写相对路径、短路径都无法定位到表单字段节点。
网传示例http://localhost/RESTFUL/GETADDRESS/{/*/bar/foo}仅适用于手动给HTTP服务绑定了自定义请求实例的场景:默认Orbeon表单运行时的表单数据存在名为fr-form-instance的实例中,必须显式定位到该实例才能取到字段值。
正确配置语法
旧版本Orbeon Forms(不支持fr:control-string-value()的版本)中,拼接字段值到URL路径的写法如下:
http://你的服务地址/接口前缀/{instance('fr-form-instance')//你的字段名}
举个实际例子,如果接口是/api/user/info,要拼接用户ID字段userId到路径中,最终资源URL写为:
http://internal.service/api/user/{instance('fr-form-instance')//userId}/info
常见踩坑说明
- 字段名要填Form Builder中给控件配置的名称(Name)属性,不是控件显示的标签名,注意大小写完全匹配
- 路径末尾不要加多余斜杠,类似
{/*/testField/}这类末尾带斜杠的写法会直接导致路径匹配失败 - 如果字段在重复节/重复网格中,需要指定行索引,比如取第一行的
testField值,写法为{instance('fr-form-instance')//testField[1]} - 不需要额外加
.text()取文本,XPath定位到元素节点后会自动读取节点的字符串值,部分旧版本加.text()反而会返回空 xxf:value()、fr:control-value()、xxf:property()等函数在旧版本HTTP服务的XPath上下文中并未注册,调用后会直接返回空值,不要使用
有效性验证
可以先在资源URL中写入如下测试表达式:
test/{name(instance('fr-form-instance'))}
如果调用时拼接出来的路径是test/fr-form-instance,说明实例定位逻辑正常,再替换成对应字段路径即可。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

