我在XBL中创建自己的组件,因此必须在其中使用提交。我有用户可以在Form Builder中提供的提交的两个参数(资源,XPath)(例如自动完成控件):
<xbl:binding element="fr|myControl" id="fr-myControl" xxbl:mode="lhha binding value">
<metadata xmlns="....">
....
<templates>
<instance label=""/>
<view>
<fr:myControl id="" appearance="minimal" xpath="" xmlns="" resource="" >
<xf:label ref=""/>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</fr:myControl>
</view>
</templates>
<control-details>
<xf:input ref="@resource">
....
</xf:input>
<xf:input ref="@xpath">
....
</xf:input>
</control-details>
</metadata>
....
然后,我想调用REST提交,其中包含用户在表单构建器(@resource
和@xpath
)中提供的资源和结果XPath :
<xf:model>
<xf:instance id="result"><value/></xf:instance>
<xf:instance id="sub"><value/></xf:instance>
<xf:instance id="resource"><value/></xf:instance>
<xf:instance id="xpath"><value/></xf:instance>
....
<xf:submission id="my-submission" instance="sub"
mediatype="application/xml"
method="get"
resource="{instance('resource')}"
replace="instance"
serialization="none"/>
<xf:action id="populate-data-binding">
<xf:action context="instance('sub')"
ev:event="xforms-submit-done"
ev:observer="my-submission">
<xf:action>
<!-- there is a problem-->
<xf:var as="xs:string" name="control-value" value="instance('xpath')"/>
<xf:setvalue ref="instance('result')" value="$control-value"/>
</xf:action>
</xf:action>
</xf:action>
</xf:model>
....
<xf:var name="resource-avt" xbl:attr="xbl:text=resource" xxbl:scope="outer"/>
<xf:var name="resource" xbl:attr="xbl:text=resource" >
<xf:action ev:event="xforms-enabled xforms-value-changed">
<xf:setvalue ref="instance('resource')" value="$resource"/>
</xf:action>
</xf:var>
<xf:var name="xpath-avt" xbl:attr="xbl:text=xpath" xxbl:scope="outer"/>
<xf:var name="xpath" xbl:attr="xbl:text=xpath" as="xs:string">
<xf:action ev:event="xforms-enabled xforms-value-changed">
<xf:setvalue ref="instance('xpath')" value="$xpath"/>
</xf:action>
</xf:var>
我的问题在上面突出显示的行中:在其中,instance('xpath')
我具有用户在Form Builder中提供的参数值,例如:/pathToResult
。我想从与关联的提交资源中获取XML结果的一部分/pathToResult
。但是不幸的instance('result')
是:/pathToInstance
代替了预期的结果,例如响应XML:
<xml>
<blabla>bla</blabla>
<pathToResult>MY RESULT !!!</pathToResult>
</xml>
result-instance的期望值为:MY RESULT !!!
而不是/pathToResult
。
但是,如果我这样修改代码:
<xf:var as="xs:string" name="control-value" value="/pathToResult"/>
它运作良好,但是在这种情况下,路径是硬编码的。相反,我想给表单生成器用户一个机会,以在控件配置中指定XPath表达式。
如何修改代码以达到预期效果?
一个答案类似于为另一个问题提供的答案:use saxon:evaluate()
。
<xf:setvalue ref="instance('result')" value="saxon:evaluate(instance('xpath'))"/>
另一种方法如下。如果您的本地XBL模型在之下<xbl:template>
,则可以使用XBL绑定节点上存在的属性来修改模型。因此,例如:
<xf:submission xbl:attr="resource" ...>
这resource
会将属性复制<fr:mycontrol>
到<xf:submission>
元素上。
这比较简单,应该完全按照您想要的去做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句