我正在尝试运行此代码:
<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>
其中 retrieveControl 包含此文档:
<?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 =“。”,它会喷出数据。
无法弄清楚为什么它不能遍历将 jax-rx 指定为 ns 的元素......任何解决方法(查询在 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) 与规范相比发生错误说,这是(来自http://www.w3.org/TR/xforms11/#submit-data-replacement):
如果 replace 属性包含值“text”并且提交响应符合 XML 媒体类型(由 [RFC 3023] 中的内容类型说明符定义)或文本媒体类型(由 text/* 的内容类型说明符定义),然后将响应数据编码为文本并替换替换目标节点的内容。
好的,这可以通过在 select1 中的 item-label 中填充实例的全部内容来证明,请注意,上面的提交 ID getData 正在尝试替换在引用的实例 ID 中甚至不存在的 targetref,但它可以工作(如果我为引用的实例 ID 正确放置了 targetref,它将不起作用;换句话说,它仅在 targetref 指向“默认”实例(恰好是第一个实例)中的有效节点时才有效,而不是引用的实例 ID。即使它工作,它也不会替换 targetref 节点中的内容(而且我不知道它到底在哪里(Orbeon 的提交替换机制)放置了该内容,我只知道它将该内容放置在某处默认实例,但在哪里 - 在新创建的文本节点中?)
您需要将提交资源修改为示例数据文件可用的 URL,抱歉无法使其更加独立。