我正在尝试运行此代码:
<xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
appearance="xxforms:tree"
bind="retrievalControl-bind"
id="retrievalControl-control-laidOut">
<xforms:label ref="$form-resources/retrievalControl/label"/>
<xforms:help ref="$form-resources/retrievalControl/help"/>
<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP">
<xforms:label ref="NAME"/>
<xforms:value />
</xforms:itemset>
其中retrievalControl包含此文档:
<?xml version="1.0" encoding="utf-8"?><jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net"><jax-rx:result><APP count="1">
<NAME>ABCD</NAME>
<ID>12</ID>
</APP>
</jax-rx:result></jax-rx:results>
但它不起作用(没有为select1创建的项目)。如果我删除/ * / * / APP,以便将整个文档打印为项目标签(通过将标签修改为ref =“。”,它会喷出数据。
无法弄清楚为什么它不能遍历指定为ns的jax-rx的元素...任何变通方法(查询在XMLSpy中工作正常)?
根据下面最早的回复(1月27日)进行更新:
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
<xhtml:head>
<xforms:model>
<xforms:instance>
<instance>
<weird/>
</instance>
</xforms:instance>
<xforms:instance id="fr-form-instance">
<form>
<retrievalSection>
<retrievalControl>
<jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net">
<jax-rx:result>
<APP count="1">
<NAME>ABCD</NAME>
<ID>12</ID>
</APP>
</jax-rx:result>
</jax-rx:results>
</retrievalControl>
</retrievalSection>
</form>
</xforms:instance>
<xforms:bind id="fr-form-binds" nodeset="instance('fr-form-instance')">
<xforms:bind id="retrievalSection-bind" nodeset="retrievalSection" name="retrievalSection">
<xforms:bind id="retrievalControl-bind" nodeset="retrievalControl" name="retrievalControl"/>
</xforms:bind>
</xforms:bind>
<xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale"
method="get"
id="getData"
replace="text"
instance="fr-form-instance"
targetref="/instance/weird"
serialization="none">
<xforms:message ev:event="xforms-submit-error" level="modal">A submission error occurred:<xforms:output value="event('error-type')"/>
</xforms:message>
</xforms:submission>
<xforms:send ev:event="xforms-ready" submission="getData"/>
</xforms:model>
</xhtml:head>
<xhtml:body>
<xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
appearance="xxforms:tree"
bind="retrievalControl-bind"
id="retrievalControl-control-laidOut">
<xforms:itemset nodeset="instance('fr-form-instance')">
<!--<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP">-->
<!--<xforms:itemset nodeset="instance()/*/*/APP">-->
<xforms:label ref="."/>
<xforms:value/>
</xforms:itemset>
</xforms:select1>
</xhtml:body>
我根据下面的第一个响应进一步研究了这个问题,问题似乎不在于能够用命名空间解析元素,但可能与XForms提交的实现方式有关(或者我的理解不好,在这种情况下我请求是通过对此问题的回答纠正)。 XForms Submission的问题是在尝试使用replace =“text”时有错误的实例替换,但可能也会影响replace =“instance”,它看起来只在默认实例上发生替换a)b)与spec相比发生错误说,(来自http://www.w3.org/TR/xforms11/#submit-data-replacement):
如果replace属性包含值“text”且提交响应符合XML mediatype(由[RFC 3023]中的内容类型说明符定义)或文本媒体类型(由内容类型说明符定义) text / *),然后将响应数据编码为文本并替换替换目标节点的内容。
好的,这可以通过在select1中的item-label中填充实例的整个内容来证明,请注意上面的提交ID getData正在尝试替换在引用的实例ID中甚至不存在的targetref,但是它有效(如果我正确地为引用的实例ID放置了targetref,它就不起作用;换句话说,只有当targetref指向'default'实例中的有效节点时才会起作用(恰好是第一个实例) ,而不是引用的实例ID。 即使它工作,它也不会替换targetref节点中的内容(我不知道它究竟在哪里(Orbeon的提交替换机制)放置该内容,我所知道的是它将该内容放在默认实例的某个地方,但是在哪里 - 在新创建的文本节点中?)
您需要将提交资源修改为示例数据文件可用的URL,抱歉无法使其更加独立。
答案 0 :(得分:0)
我怀疑<retrievalControl>
并不像您期望的那样真正包含<jax-rx:results>
。如果我创建一个独立的示例,将您粘贴的部分放在一起,一切都按预期工作(见下文)。您是否有一个完整的(尽可能少的)示例来重现这个?
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
<xhtml:head>
<xforms:model>
<xforms:instance>
<instance>
<select1/>
<jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net">
<jax-rx:result>
<APP count="1">
<NAME>ABCD</NAME>
<ID>12</ID>
</APP>
</jax-rx:result>
</jax-rx:results>
</instance>
</xforms:instance>
</xforms:model>
</xhtml:head>
<xhtml:body>
<xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary"
appearance="xxforms:tree"
ref="select1"
id="retrievalControl-control-laidOut">
<xforms:itemset nodeset="instance()/*/*/APP">
<xforms:label ref="NAME"/>
<xforms:value/>
</xforms:itemset>
</xforms:select1>
</xhtml:body>
</xhtml:html>
答案 1 :(得分:0)
XForms 1.1说的是targetref
:
“范围内的评估背景 submission元素用于 评估表达“。
你在你的例子中写道:
<xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale"
method="get"
id="getData"
replace="text"
instance="fr-form-instance"
targetref="/instance/weird"
serialization="none">
instance
属性不会修改范围内的评估上下文(据我可以阅读规范),所以这里targetref
它与instance
属性无关,但是提交的范围内评估上下文,由于您未指定ref
属性,因此是默认(第一个)实例。
基本上,如果您使用targetref
,请不要使用instance
,因此会让您感到困惑。
请删除instance
属性,然后撰写targetref="instance('fr-form-instance')/weird"
。
现在,如果您使用上面的更新示例执行此操作,您将获得xforms-submit-error
,因为第二个实例中不存在该节点。
让我们看看这是否会让你更进一步。